Menu

Perulangan while dan do while PHP: Sintaks dan Contoh

while (condition) { ... } mengulang sebuah blok selama kondisinya true, dan memeriksanya sebelum setiap putaran. do { ... } while (condition); memeriksanya sesudahnya, jadi selalu berjalan setidaknya sekali. Membahas while (true) dengan break, membaca file baris demi baris, dan cara menghindari infinite loop.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

while (condition) { ... } menjalankan blok berulang-ulang selama kondisinya true. Kondisinya diperiksa sebelum setiap putaran, jadi kalau sudah false sejak awal, badan loop-nya tidak pernah dijalankan. Harus ada sesuatu di dalam loop yang mengubah kondisinya, atau loop itu tidak akan pernah berakhir.

Pertanyaan seperti inilah yang cocok untuk while: kamu tidak tahu jumlah putarannya sejak awal, hanya kapan harus berhenti. Ubah suku bunganya lalu jalankan lagi.

do while: dijalankan setidaknya sekali

do { ... } while (condition); memeriksa kondisi setelah badan loop, jadi badan loop-nya selalu dijalankan sekali. Perhatikan titik koma di akhirnya.

Pemakaian yang umum adalah "coba dulu, lalu periksa": lempar dadu sampai mendapat enam, buat kode sampai menemukan yang belum dipakai. Percobaan pertama harus terjadi sebelum ada yang bisa diperiksa. Contoh ini memberi hasil yang berbeda setiap kali dijalankan:

while (true) dengan break

Kalau syarat keluarnya lebih mudah diperiksa di tengah badan loop, tulis while (true) dan keluar dengan break. continue melompat ke pemeriksaan berikutnya, seperti di loop mana pun.

array_shift() mengembalikan null begitu array-nya kosong, dan itulah jalan keluar yang lain. Loop yang sama bisa ditulis sebagai while ($queue), karena array kosong dianggap false.

Membaca file baris demi baris

fgets() mengembalikan satu baris setiap kali dipanggil dan false di akhir file, jadi fungsi ini bisa langsung menggerakkan loop while. Blok ini menulis file-nya dulu, lalu membacanya kembali.

Tanda kurung di sekitar $line = fgets($handle) itu penting: assignment terjadi lebih dulu, lalu hasilnya dibandingkan dengan false. Memakai !== false alih-alih pemeriksaan truthy biasa mencegah baris terakhir yang hanya berisi 0 (tanpa baris baru setelahnya) menghentikan loop terlalu cepat. Halaman fopen() membahas fungsi-fungsi file.

while dengan endwhile di template

Seperti if dan for, while punya bentuk titik dua untuk HTML: while (...): dan endwhile;. Contoh ini mencetak daftar hitung mundur di tab Halaman.

Kesalahan umum: loop yang tidak pernah berakhir

Penghitungnya harus bergerak menuju jalan keluar. Lupa menulis $i++, atau mengubah variabel yang salah, dan kondisinya akan tetap true selamanya. Di web server, PHP menghentikan script setelah max_execution_time (default 30 detik) dengan fatal error. Di command line, script itu tidak pernah berhenti.

// Never ends: $i is never changed
$i = 0;
while ($i < 3) {
    echo $i;
}

Batas pengaman adalah penjaga yang murah untuk loop yang bergantung pada data dari luar, seperti mencoba ulang sebuah pemanggilan atau menelusuri hasil per halaman:

Jalankan beberapa kali: kadang berhasil lebih awal, kadang menyerah, tetapi selalu berakhir. Kalau kamu sudah tahu jumlah putarannya sejak awal, for loop menyatakan awal, akhir, dan langkahnya dalam satu baris dan lebih kecil kemungkinannya untuk salah.

Pertanyaan yang sering diajukan

Apa bedanya while dan do while di PHP?

while memeriksa kondisi sebelum setiap putaran, jadi badan loop-nya mungkin tidak pernah dijalankan. do { ... } while ($cond); memeriksa sesudah setiap putaran, jadi badan loop-nya selalu dijalankan setidaknya sekali. Perhatikan titik koma setelah kondisi do while.

Bagaimana cara menghentikan infinite loop while di PHP?

Di dalam loop, akhiri dengan break saat syarat keluarnya terpenuhi: while (true) { ...; if ($done) { break; } }. Kalau loop tidak punya break dan kondisinya tidak pernah menjadi false, script berjalan sampai dihentikan oleh max_execution_time PHP (untuk request web) atau selamanya (di command line).

Kapan sebaiknya memakai while alih-alih for di PHP?

Pakai while kalau kamu tidak tahu berapa putaran yang dibutuhkan: membaca sampai file habis, mencoba ulang sampai sesuatu berhasil, memproses queue sampai kosong. Pakai for saat kamu menghitung, dan foreach untuk mengunjungi setiap elemen array.

Apakah PHP punya loop do until?

Tidak. Negasikan kondisi berhentinya di do while: do { $n++; } while (!($n >= 3)); berjalan sampai $n >= 3 bernilai true. until bukan kata kunci PHP.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai