stringformatMenengah3 mnt baca

Format String

Susun string rapi: sprintf, number_format, heredoc, dan nl2br.

Kenapa Format String Penting?

Data mentah jarang siap tampil. Angka 1500000 lebih enak dibaca sebagai 1.500.000, tanggal 2026-10-08 sebagai 08 Oktober 2026, dan struk belanja butuh kolom yang rapi sejajar. Format string mengubah nilai mentah menjadi teks yang manusiawi dan konsisten.

php
<?php
// Contoh 1: format angka dan uang
$harga = 1500000;
echo number_format($harga);                 // "1.500.000" (format Indonesia otomatis)
echo number_format($harga, 2, ",", ".");    // "1.500.000,00": 2 desimal

$diskon = 0.157;
echo number_format($diskon * 100, 1) . "%";  // "15,7%": persen rapi

// Contoh 2: sprintf untuk template presisi
$nama = "Sinta";
$skor = 92;
echo sprintf("Halo %s, nilaimu %d.", $nama, $skor);
// "Halo Sinta, nilaimu 92.": %s = string, %d = integer

number_format() adalah jawaban untuk semua tampilan angka/uang. sprintf() seperti "cetakan": tulis template dengan placeholder (%s, %d, %f), lalu isi dengan nilai. Hasilnya selalu konsisten tanpa repot menyambung manual.

php
<?php
// Contoh 2 lanjutan: struk belanja dengan kolom sejajar
$items = [
    ["Kopi", 2, 15000],
    ["Roti Bakar Coklat", 1, 12000],
];

foreach ($items as [$nama, $qty, $harga]) {
    $subtotal = $qty * $harga;
    // %-20s: rata kiri lebar 20; %10s: rata kanan lebar 10
    echo sprintf("%-20s %3d x %10s = %10s\n",
        $nama, $qty,
        number_format($harga),
        number_format($subtotal));
}
// Kopi                 2 x     15.000 =     30.000
// Roti Bakar Coklat    1 x     12.000 =     12.000

Angka negatif di %-20s artinya rata kiri, positif rata kanan. Pola ini dipakai di struk, laporan teks, dan tabel CLI.

Jebakan yang Sering Terjadi

Memakai hasil number_format untuk dihitung lagi.

php
<?php
$total = number_format(1500000);   // "1.500.000" (STRING!)
$bayar = $total + 50000;           // 1 + 50000 = 50001?! Titik dianggap juggling aneh

number_format mengembalikan string berformat tampilan. Aturan emas: hitung dengan angka murni, format hanya saat menampilkan. Jangan pernah menyimpan hasil format ke variabel yang akan dihitung.

Lupa urutan placeholder sprintf. sprintf("%d %s", $nama, $skor) tertukar menghasilkan sampah. Untuk template panjang, pertimbangkan named argument atau susun variabel dulu agar urutannya jelas.

Format Rupiah yang Benar

Indonesia memakai titik untuk ribuan dan koma untuk desimal, kebalikan Amerika. number_format fleksibel untuk keduanya:

php
<?php
echo number_format(1500000);                // 1.500.000 (Indonesia)
echo number_format(1500000, 2, ",", ".");   // 1.500.000,00
echo number_format(1500000, 2, ".", ",");   // 1,500,000.00 (Amerika)

// Helper rupiah sekali tulis, pakai selamanya
function rupiah(float $angka): string {
    return "Rp" . number_format($angka, 0, ",", ".");
}
echo rupiah(1500000);   // Rp1.500.000

// Hati-hati: jangan format dua kali!
$h = rupiah(15000);          // "Rp15.000" (string!)
echo rupiah((float) str_replace(["Rp", "."], "", $h));  // ribet! hindari

Aturan emas diulang: simpan angka murni di variabel, format hanya di detik terakhir sebelum tampil. Variabel $total selalu angka, rupiah($total) hanya untuk echo.

Catatan teknis: Untuk tanggal, fungsi date("d F Y") memformat timestamp menjadi teks. Nama bulan dalam bahasa Inggris secara default; untuk bahasa Indonesia, petakan manual dengan array bulan atau pakai IntlDateFormatter (dibahas di modul date-time).

Tantangan

Struk belanja

Buat array 3 barang (nama, harga, qty). Dengan foreach + sprintf + number_format, tampilkan struk: tiap baris "Nama xQty = Rp subtotal" dan baris terakhir "TOTAL: Rp X".