# Perulangan dengan \`while\`

`while` loop adalah salah satu struktur perulangan dasar dalam pemrograman. Loop ini memungkinkan kita untuk menjalankan sebuah blok kode berulang kali selama kondisi yang diberikan benar (true). Jika kondisi tersebut salah (false), loop akan berhenti.

**Sintaks `while` Loop**

Sintaks dasar dari `while` loop adalah sebagai berikut:

```php
while (condition) {
    // blok kode yang akan dijalankan berulang kali
}
```

* **condition**: Kondisi yang diperiksa sebelum setiap iterasi. Jika kondisi ini benar (true), maka blok kode di dalam loop akan dijalankan. Jika salah (false), loop akan berhenti.

**Penjelasan dengan Contoh**

Mari kita lihat beberapa contoh untuk lebih memahami bagaimana cara kerja `while` loop.

**Contoh: Menampilkan Angka dari 1 hingga 10**

```php
$i = 1;
while ($i <= 10) {
    echo "Angka: $i <br>";
    $i++;
}
```

**Penjelasan:**

1. **Inisialisasi**: `$i = 1`
   * Variabel `$i` diinisialisasi dengan nilai 1 sebelum loop dimulai.
2. **Kondisi**: `$i <= 10`
   * Sebelum setiap iterasi, kondisi `$i <= 10` diperiksa. Jika benar, blok kode di dalam loop dijalankan.
3. **Blok Kode**: `echo "Angka: $i <br>";`
   * Blok kode ini dijalankan setiap kali kondisi benar. Ini akan mencetak nilai `$i`.
4. **Increment**: `$i++`
   * Setelah setiap iterasi, nilai `$i` ditingkatkan dengan 1 (`$i++`).

Loop ini akan berjalan 10 kali, mencetak angka dari 1 hingga 10.

**Contoh Lain**

**Contoh: Menghitung Jumlah Bilangan dari 1 hingga 100**

```php
$jumlah = 0;
$i = 1;
while ($i <= 100) {
    $jumlah += $i;
    $i++;
}
echo "Jumlah: " . $jumlah;
```

**Penjelasan:**

* **Inisialisasi**: `$i = 1`
* **Kondisi**: `$i <= 100`
* **Blok Kode**: `$jumlah += $i`
  * Setiap iterasi, nilai `$i` ditambahkan ke variabel `$jumlah`.
* **Increment**: `$i++`

Loop ini menjumlahkan semua angka dari 1 hingga 100 dan mencetak totalnya.

**Contoh: Menampilkan Bilangan Genap dari 1 hingga 20**

```php
$i = 2;
while ($i <= 20) {
    echo "Bilangan Genap: $i <br>";
    $i += 2;
}
```

**Penjelasan:**

* **Inisialisasi**: `$i = 2`
  * Variabel `$i` diinisialisasi dengan nilai 2.
* **Kondisi**: `$i <= 20`
  * Loop akan berjalan selama `$i` kurang dari atau sama dengan 20.
* **Blok Kode**: `echo "Bilangan Genap: $i <br>";`
  * Setiap iterasi, nilai `$i` yang genap dicetak.
* **Increment**: `$i += 2`
  * Setelah setiap iterasi, `$i` ditambah 2.

Loop ini mencetak semua bilangan genap dari 2 hingga 20.

#### Penggunaan `while` Loop dalam Berbagai Situasi

**Iterasi Melalui Array dengan Indeks**

Kita dapat menggunakan `while` loop untuk mengiterasi elemen-elemen dalam array menggunakan indeks.

**Contoh: Iterasi Melalui Array dengan `while` Loop**

```php
$buah = array("Apel", "Pisang", "Jeruk", "Mangga");
$i = 0;
while ($i < count($buah)) {
    echo "Buah: " . $buah[$i] . "<br>";
    $i++;
}
```

**Penjelasan:**

* **Inisialisasi**: `$i = 0`
  * Mulai dari indeks 0.
* **Kondisi**: `$i < count($buah)`
  * Loop berjalan selama `$i` kurang dari panjang array `$buah`.
* **Blok Kode**: `echo "Buah: " . $buah[$i] . "<br>";`
  * Mencetak setiap elemen array `$buah` berdasarkan indeks.
* **Increment**: `$i++`
  * Setelah setiap iterasi, nilai `$i` meningkat.

#### Nested `while` Loop (Loop Bersarang)

Kita dapat menggunakan loop di dalam loop untuk mengulang melalui struktur data yang lebih kompleks, seperti matriks atau array multidimensi.

**Contoh: Menampilkan Matriks 2D**

```php
$matriks = array(
    array(1, 2, 3),
    array(4, 5, 6),
    array(7, 8, 9)
);

$i = 0;
while ($i < count($matriks)) {
    $j = 0;
    while ($j < count($matriks[$i])) {
        echo $matriks[$i][$j] . " ";
        $j++;
    }
    echo "<br>";
    $i++;
}
```

**Penjelasan:**

* **Inisialisasi**: `$i = 0`, `$j = 0`
  * Loop luar mengontrol baris, loop dalam mengontrol kolom.
* **Kondisi**: `$i < count($matriks)`, `$j < count($matriks[$i])`
  * Loop berjalan selama masih ada baris dan kolom dalam matriks.
* **Blok Kode**: `echo $matriks[$i][$j] . " ";`
  * Mencetak setiap elemen matriks.
* **Increment**: `$i++`, `$j++`
  * Setelah setiap iterasi, nilai `$i` dan `$j` meningkat.

Loop bersarang ini mencetak setiap elemen dari matriks 2D, baris per baris.

#### Tips dan Praktik Terbaik

1. **Gunakan `while` Loop Ketika Jumlah Iterasi Tidak Diketahui**: `while` loop sangat berguna ketika kita tidak tahu sebelumnya berapa kali kita ingin mengulangi suatu tindakan, misalnya ketika membaca data dari file atau input pengguna.
2. **Jaga Kebersihan Kode**: Pastikan kode di dalam loop mudah dibaca dan dipahami. Gunakan komentar jika perlu.
3. **Hindari Loop Tak Terhingga**: Selalu pastikan kondisi loop akan berubah menjadi false pada titik tertentu untuk menghindari loop yang berjalan tanpa henti.
4. **Optimalkan Kondisi Loop**: Jika mungkin, hindari perhitungan berat dalam kondisi loop. Misalnya, simpan panjang array dalam variabel sebelum loop untuk menghindari pemanggilan fungsi `count()` berulang kali.

Dengan memahami dan menerapkan `while` loop dengan baik, Anda dapat menulis kode PHP yang efisien dan mudah dipahami.
