Perulangan berbasis hitungan — cetak 5 baris, proses 100 record, buat tabel 3 kali 3 — muncul begitu sering sehingga PHP menyediakan sintaks khusus untuknya. for memadukan tiga bagian yang sebelumnya kita tulis terpisah pada while (inisialisasi counter, kondisi, dan pembaruan counter) ke dalam satu baris header. Pusatnya tiga bagian itu membuat niat perulangan terbaca sekilas: apa titik awalnya, kapan berhentinya, dan seberapa cepat bergeraknya. Pada chapter ini kita bedah anatomi header for, variasi langkahnya, penggunaan beberapa ekspresi sekaligus, bentuk khusus for (;;), perulangan bersarang, lalu tutup dengan panduan memilih antara for dan while.

Anatomi Header for #

Header for memiliki tiga slot yang dipisah titik koma: for (init; kondisi; update). Eksekusinya mengikuti urutan yang tetap dan mudah dihafal.

php
<?php
for ($i = 1; $i <= 5; $i++) {
    echo "Iterasi ke-$i\n";
}

Output yang Dihasilkan:

text
Iterasi ke-1
Iterasi ke-2
Iterasi ke-3
Iterasi ke-4
Iterasi ke-5

Mari kita bedah urutan kerjanya langkah demi langkah:

  1. Bagian init ($i = 1) dieksekusi tepat satu kali di awal, sebelum pemeriksaan pertama.
  2. Bagian kondisi ($i <= 5) diperiksa sebelum setiap iterasi — sama seperti while, ini pre-test: blok bisa saja tidak pernah berjalan bila kondisi awal sudah false.
  3. Isi blok dijalankan ketika kondisi bernilai true.
  4. Bagian update ($i++) dijalankan setelah isi blok selesai, lalu eksekusi kembali ke pemeriksaan kondisi.

Dengan seluruh “perangkat” perulangan di satu baris header, pembaca kode langsung tahu bahwa contoh di atas berjalan lima kali tanpa harus memindai isi blok mencari baris pembaruan counter.

Variasi Nilai Langkah #

Bagian update tidak terbatas pada $i++. Semua ekspresi yang memajukan (atau memundurkan) counter bisa dipakai, dan kondisinya disesuaikan agar arah geraknya bertemu.

php
<?php
for ($i = 0; $i <= 10; $i += 2) {
    echo "$i ";
}
echo "\n";

for ($i = 10; $i >= 0; $i -= 5) {
    echo "$i ";
}
echo "\n";

Output yang Dihasilkan:

text
0 2 4 6 8 10
10 5 0

Perulangan pertama melangkah dua angka sekali maju ($i += 2), menghasilkan bilangan genap 0 sampai 10. Perulangan kedua berjalan mundur dengan $i -= 5, dan kondisinya berubah menjadi $i >= 0 agar berhenti tepat setelah melewati angka nol. Ketiga slot header selalu harus saling mendukung: jika arah update tidak pernah membuat kondisi menjadi false, hasilnya adalah infinite loop persis seperti kelalaian pada while.

Beberapa Ekspresi dengan Koma #

Bagian init dan update boleh memuat lebih dari satu ekspresi, dipisah koma. Fitur ini berguna saat perulangan melibatkan dua counter yang bergerak bersamaan.

php
<?php
for ($i = 1, $j = 5; $i < $j; $i++, $j--) {
    echo "i=$i, j=$j\n";
}

Output yang Dihasilkan:

text
i=1, j=5
i=2, j=4

Mari kita amati perilakunya:

  1. Bagian init ($i = 1, $j = 5) menyiapkan dua counter sekaligus dalam satu pernyataan.
  2. Bagian update ($i++, $j--) memajukan $i dan memundurkan $j setiap akhir iterasi, sehingga keduanya saling mendekat.
  3. Kondisi $i < $j menjadi false ketika nilainya bertemu di i=3, j=3, sehingga perulangan berhenti setelah dua iterasi.
  4. Bagian kondisi hanya boleh satu ekspresi — koma tidak diizinkan di slot ini. Bila syaratnya berlipat, gabungkan dengan operator logika, misalnya $i < $j && $i < 10.

Bagian Kosong dan for (;;) #

Ketiga bagian header boleh dikosongkan. Inisialisasi bisa dipindah ke atas header, update bisa dipindah ke akhir isi blok, dan kondisi yang dikosongkan selalu dianggap true — sehingga for (;;) identik dengan while (true): perulangan tanpa akhir yang hanya bisa dihentikan lewat break.

php
<?php
$hitung = 1;

for (;;) {
    echo "Putaran ke-$hitung\n";
    if ($hitung === 3) {
        break;
    }
    $hitung++;
}

Output yang Dihasilkan:

text
Putaran ke-1
Putaran ke-2
Putaran ke-3

Pada contoh di atas, inisialisasi dan pembaruan counter dipindah keluar dari header, dan break menjadi satu-satunya pintu keluar ketika $hitung mencapai 3. Bentuk for (;;) ini bukan sekadar keanehan sintaks — pada program nyata seperti daemon atau worker yang memang dirancang berjalan terus menerus, loop tanpa kondisi akhir adalah pola yang disengaja.

for Bersarang #

for dapat berada di dalam for lain, dan pola ini adalah cara standar memproses struktur dua dimensi seperti tabel. Contoh berikut mencetak tabel perkalian 3x3.

php
<?php
for ($baris = 1; $baris <= 3; $baris++) {
    for ($kolom = 1; $kolom <= 3; $kolom++) {
        echo $baris . "x" . $kolom . "=" . ($baris * $kolom) . "  ";
    }
    echo "\n";
}

Output yang Dihasilkan:

text
1x1=1  1x2=2  1x3=3
2x1=2  2x2=4  2x3=6
3x1=3  3x2=6  3x3=9

Cara membacanya: untuk setiap satu iterasi for luar, for dalam menjalankan seluruh perulangannya sampai tuntas. Baris pertama tabel lahir ketika $baris bernilai 1 dan $kolom berjalan 1, 2, 3; setelah for dalam selesai, echo "\n" menutup baris, $baris naik menjadi 2, dan $kolom diinisialisasi ulang dari 1 lagi. Totalnya ada 3 x 3 = 9 pasangan nilai yang dicetak. Perhatikan juga penamaan counter yang deskriptif ($baris, $kolom) — pada loop bersarang, nama generik seperti $i dan $j membuat pembaca harus menghafal peran masing-masing.

Memilih for atau while #

for, while, dan do-while sama-sama mampu menulis perulangan apa pun — pilihan kita soal mana yang paling jujur menyampaikan maksud. Panduan praktisnya:

SituasiStruktur yang paling pas
Jumlah iterasi diketahui dan berbasis hitunganfor
Iterasi bergantung pada peristiwa, misalnya membaca berkas sampai habiswhile
Isi blok wajib berjalan minimal sekali, misalnya prompt atau menudo-while

Contoh idiom ($baris = fgets($handle)) !== false pada chapter while Loops akan terasa canggung jika dipaksakan ke header for, karena tidak ada hitungan yang bisa diprediksi. Sebaliknya, perulangan berhitung seperti tabel perkalian di atas justru kehilangan kejelasannya bila ditulis while dengan tiga baris persiapan yang terpencar. Kombinasi do-while untuk prompt minimal-sekali sudah kita bahas pada chapter do-while Loops .

Berkas contoh.php pada bagian bawah halaman merangkum seluruh contoh di atas dalam satu program utuh yang dapat Anda unduh dan jalankan langsung.

Ringkasan #

for memusatkan inisialisasi, kondisi, dan pembaruan counter dalam satu header sehingga perulangan berbasis hitungan terbaca sekilas. Langkah counter bisa dimajukan, dimundurkan, atau melompat; init dan update bisa memuat beberapa ekspresi sekaligus; kondisi yang dikosongkan menghasilkan for (;;) yang hanya berhenti lewat break. Loop bersarang memproses struktur dua dimensi dengan for dalam yang tuntas per iterasi for luar. Ketika yang diulang bukan hitungan melainkan isi sebuah array, PHP menyediakan struktur khusus yang lebih ekspresif lagi: foreach, topik chapter berikutnya.

Referensi #

Berkas Sumber

Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.

contoh.php

Unduh berkas
php
<?php
// contoh.php — rangkuman contoh Chapter for Loops.
// Jalankan dengan: php contoh.php

// 1. Header dasar: init, kondisi, update
for ($i = 1; $i <= 5; $i++) {
    echo "Iterasi ke-$i\n";
}

// 2. Variasi nilai langkah
for ($i = 0; $i <= 10; $i += 2) {
    echo "$i ";
}
echo "\n";

for ($i = 10; $i >= 0; $i -= 5) {
    echo "$i ";
}
echo "\n";

// 3. Beberapa ekspresi dengan koma
for ($i = 1, $j = 5; $i < $j; $i++, $j--) {
    echo "i=$i, j=$j\n";
}

// 4. Bagian kosong: for (;;) dengan break
$hitung = 1;

for (;;) {
    echo "Putaran ke-$hitung\n";
    if ($hitung === 3) {
        break;
    }
    $hitung++;
}

// 5. for bersarang: tabel perkalian 3x3
for ($baris = 1; $baris <= 3; $baris++) {
    for ($kolom = 1; $kolom <= 3; $kolom++) {
        echo $baris . "x" . $kolom . "=" . ($baris * $kolom) . "  ";
    }
    echo "\n";
}