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
// 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 = integernumber_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
// 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.000Angka 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
$total = number_format(1500000); // "1.500.000" (STRING!)
$bayar = $total + 50000; // 1 + 50000 = 50001?! Titik dianggap juggling anehnumber_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
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! hindariAturan 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 pakaiIntlDateFormatter(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".