Loop (perulangan) menjalankan blok kode yang sama berkali-kali, dengan sesuatu yang berubah di tiap putaran. Bayangin Bu Tini memanggil antrean di Warung Bu Tini: "Antrean nomor 1! Antrean nomor 2! Antrean nomor 3!" Kalimatnya sama, cuma nomornya yang naik, dan dia berhenti begitu antreannya habis. Di PHP kamu gak menulis echo tiga kali: kamu menulis satu echo di dalam loop.
🧪 Tebakan cepat:
for ($i = 0; $i < 3; $i++) { echo $i; }mencetak apa? Tebak dulu, jawabannya ada di bagian "for: ulang sebanyak yang kamu tentukan".
for: ulang sebanyak yang kamu tentukan
<?php
for ($nomor = 1; $nomor <= 3; $nomor++) {
echo "Antrean nomor $nomor\n";
}
Antrean nomor 1
Antrean nomor 2
Antrean nomor 3
Kurung for berisi tiga bagian, dipisah titik koma:
$nomor = 1: nilai awal, dijalankan sekali sebelum putaran pertama.$nomor <= 3: syarat, dicek sebelum tiap putaran. Selamatrue, isi kurung kurawalnya jalan.$nomor++: langkah, dijalankan sesudah tiap putaran.++artinya tambah 1."\n"di akhir teks membuat baris baru, jadi tiap nomor punya barisnya sendiri.
| Putaran | $nomor |
$nomor <= 3 |
Yang terjadi |
|---|---|---|---|
| 1 | 1 | true |
cetak Antrean nomor 1, lalu $nomor jadi 2 |
| 2 | 2 | true |
cetak Antrean nomor 2, lalu $nomor jadi 3 |
| 3 | 3 | true |
cetak Antrean nomor 3, lalu $nomor jadi 4 |
| - | 4 | false |
loop berhenti |
Syaratnya dicek 4 kali untuk 3 baris output: cek terakhir yang false itulah yang menghentikan loop. Di tebakan tadi, $i mulai dari 0 dan $i < 3 berhenti sebelum 3, dan gak ada spasi atau "\n", jadi yang tercetak 012. Itu jawaban tebakannya.
while: ulang selama syaratnya benar
<?php
$stok = 3;
while ($stok > 0) {
echo "Sisa stok: $stok\n";
$stok--;
}
echo "Nasi goreng habis!\n";
Sisa stok: 3
Sisa stok: 2
Sisa stok: 1
Nasi goreng habis!
while (syarat)mengecek syaratnya sebelum tiap putaran, persis seperti bagian tengahfor, tapi tanpa nilai awal dan langkah di kurungnya.$stok--artinya kurangi 1. Tanpa baris ini$stokselamanya 3, syaratnya selalutrue, dan loop-nya gak pernah berhenti. Di server, PHP menghentikannya setelah 30 detik:
Fatal error: Maximum execution time of 30 seconds exceeded in /app/warung.php on line 5
Pakai for kalau jumlah putarannya sudah jelas, while kalau kamu cuma tahu kapan harus berhenti.
foreach: telusuri isi array satu per satu
<?php
$menu = ["Nasi Goreng", "Mie Ayam", "Es Teh"];
foreach ($menu as $nama) {
echo $nama . "\n";
}
foreach mengambil isi $menu satu per satu dari depan. Di tiap putaran, $nama berisi elemen yang sedang diproses: "Nasi Goreng", lalu "Mie Ayam", lalu "Es Teh". Loop berhenti sendiri saat elemennya habis, jadi gak ada syarat yang bisa salah tulis. Karena itu foreach paling sering dipakai untuk array.
Kalau key-nya juga dibutuhkan, tulis $key => $value:
<?php
$harga = ["Nasi Goreng" => 15000, "Mie Ayam" => 12000, "Es Teh" => 5000];
foreach ($harga as $nama => $h) {
echo "$nama: Rp$h\n";
}
Nasi Goreng: Rp15000
Mie Ayam: Rp12000
Es Teh: Rp5000
Di array biasa (indexed), key-nya nomor urut 0, 1, 2.
break dan continue
<?php
$harga = ["Nasi Goreng" => 15000, "Mie Ayam" => 12000, "Es Teh" => 5000, "Kerupuk" => 2000];
foreach ($harga as $nama => $h) {
if ($nama === "Mie Ayam") {
continue; // Mie Ayam habis: lewati, lanjut ke putaran berikutnya
}
if ($h < 5000) {
break; // berhenti total, sisa elemen gak diproses
}
echo "$nama: Rp$h\n";
}
Nasi Goreng: Rp15000
Es Teh: Rp5000
continuemelompati sisa putaran ini, lalu loop lanjut ke elemen berikutnya.breakkeluar dari loop saat itu juga. Kerupuk (2.000) memicubreak, jadi loop selesai di situ.- Di loop bertingkat (loop di dalam loop),
breakcuma keluar dari loop terdalam.break 2keluar dari dua tingkat sekaligus.
⚠️ Jebakan yang sering ketemu
- while yang gak pernah berhenti. Lupa
$stok--(atau langkah sejenis) membuat syaratnya selalutrue. <padahal maksudnya<=.for ($i = 1; $i < 10; $i++)berhenti di 9. Untuk 1 sampai 10, tulis$i <= 10.- Titik koma sesudah kurung
for.for ($i = 1; $i <= 3; $i++); { echo $i; }menjalankan loop kosong, lalu blok{ }-nya jalan sekali dan mencetak4. - Mengubah array lewat
$h.$hcuma salinan, jadi$h = $h + 1000;di dalamforeachgak mengubah$harga. Tulis$harga[$nama] = $h + 1000;.
TL;DR: for (awal; syarat; langkah) untuk jumlah putaran yang jelas: syaratnya dicek sebelum tiap putaran, dan cek terakhir yang false menghentikannya. while (syarat) untuk "selama", dan isinya harus mengubah sesuatu supaya syaratnya suatu saat false. foreach ($array as $nilai) atau foreach ($array as $key => $nilai) menelusuri array sampai habis. continue melompati satu putaran, break keluar dari loop. Cetak "\n" supaya tiap hasil punya barisnya sendiri.