Struktur kontrol memungkinkan Anda untuk mengontrol alur eksekusi program. PHP menyediakan beberapa struktur kontrol seperti if-else, switch-case, dan berbagai jenis loop untuk membuat program yang dinamis dan interaktif.
Pernyataan If-Else
Pernyataan if-else memungkinkan program untuk mengambil keputusan berdasarkan kondisi tertentu.
If Statement Sederhana
<?php
$nilai = 85;
if ($nilai >= 70) {
echo "Selamat! Anda lulus dengan nilai $nilai";
}
?>
If-Else Statement
<?php
$umur = 17;
if ($umur >= 18) {
echo "Anda sudah dewasa";
} else {
echo "Anda masih di bawah umur";
}
?>
If-Elseif-Else Statement
<?php
$nilai = 85;
if ($nilai >= 90) {
$grade = "A";
} elseif ($nilai >= 80) {
$grade = "B";
} elseif ($nilai >= 70) {
$grade = "C";
} elseif ($nilai >= 60) {
$grade = "D";
} else {
$grade = "E";
}
echo "Nilai Anda: $nilai, Grade: $grade";
?>
Operator Ternary
PHP menyediakan operator ternary sebagai cara singkat untuk menulis if-else sederhana.
<?php
$umur = 20;
// Cara biasa dengan if-else
if ($umur >= 18) {
$status = "Dewasa";
} else {
$status = "Anak-anak";
}
// Cara singkat dengan operator ternary
$status = ($umur >= 18) ? "Dewasa" : "Anak-anak";
echo "Status: $status";
// Null coalescing operator (PHP 7+)
$nama = $_GET['nama'] ?? 'Pengunjung';
echo "Halo, $nama!";
?>
Switch-Case Statement
Switch-case berguna ketika Anda ingin membandingkan satu variabel dengan beberapa nilai yang berbeda.
<?php
$hari = "Senin";
switch ($hari) {
case "Senin":
echo "Hari ini hari Senin, semangat bekerja!";
break;
case "Selasa":
echo "Hari Selasa, terus bersemangat!";
break;
case "Rabu":
echo "Hari Rabu, pertengahan minggu!";
break;
case "Kamis":
echo "Hari Kamis, hampir weekend!";
break;
case "Jumat":
echo "Hari Jumat, akhir pekan sudah dekat!";
break;
case "Sabtu":
case "Minggu":
echo "Weekend! Waktunya istirahat!";
break;
default:
echo "Hari tidak dikenali";
break;
}
?>
Perhatian: Jangan lupa menggunakan break;
di setiap case untuk mencegah eksekusi case berikutnya (fall-through behavior).
Perulangan (Loop)
Perulangan memungkinkan kode untuk dieksekusi berulang kali selama kondisi tertentu terpenuhi.
While Loop
While loop akan terus mengulang selama kondisi bernilai true.
<?php
$i = 1;
echo "Counting with while loop:
";
while ($i <= 5) {
echo "Angka: $i
";
$i++;
}
// Contoh while loop dengan array
$buah = ["Apel", "Jeruk", "Mangga", "Pisang"];
$j = 0;
echo "
Daftar buah:
";
while ($j < count($buah)) {
echo "- " . $buah[$j] . "
";
$j++;
}
?>
Do-While Loop
Do-while loop mirip dengan while loop, tetapi kondisi diperiksa setelah eksekusi, sehingga kode akan dijalankan minimal satu kali.
<?php
$i = 1;
echo "Counting with do-while loop:
";
do {
echo "Angka: $i
";
$i++;
} while ($i <= 5);
// Contoh do-while yang dijalankan minimal sekali
$password = "";
do {
echo "Masukkan password (minimal 6 karakter):
";
$password = "12345"; // Simulasi input
if (strlen($password) < 6) {
echo "Password terlalu pendek!
";
}
} while (strlen($password) < 6);
echo "Password valid!";
?>
For Loop
For loop adalah bentuk loop yang lebih kompak, biasanya digunakan ketika jumlah iterasi sudah diketahui.
<?php
// For loop dasar
echo "For loop dari 1 sampai 10:
";
for ($i = 1; $i <= 10; $i++) {
echo "Angka: $i
";
}
// For loop dengan step berbeda
echo "
For loop dengan step 2:
";
for ($i = 0; $i <= 20; $i += 2) {
echo "Angka genap: $i
";
}
// For loop mundur
echo "
Countdown:
";
for ($i = 10; $i >= 1; $i--) {
echo "$i ";
}
echo "Go!
";
// Nested for loop (loop bersarang)
echo "
Tabel perkalian 5x5:
";
echo "";
for ($i = 1; $i <= 5; $i++) {
echo "";
for ($j = 1; $j <= 5; $j++) {
$hasil = $i * $j;
echo "$hasil | ";
}
echo "
";
}
echo "
";
?>
Foreach Loop
Foreach loop adalah cara terbaik untuk mengiterasi array dalam PHP.
<?php
// Foreach dengan array terindeks
$buah = ["Apel", "Jeruk", "Mangga", "Pisang"];
echo "Daftar buah:
";
foreach ($buah as $item) {
echo "- $item
";
}
// Foreach dengan array asosiatif
$siswa = [
"nama" => "Andi Wijaya",
"umur" => 17,
"kelas" => "XII IPA",
"nilai" => 85
];
echo "
Data siswa:
";
foreach ($siswa as $key => $value) {
echo "$key: $value
";
}
// Foreach dengan array multidimensi
$data_siswa = [
["nama" => "Andi", "nilai" => 85],
["nama" => "Budi", "nilai" => 90],
["nama" => "Citra", "nilai" => 78]
];
echo "
Daftar nilai siswa:
";
foreach ($data_siswa as $siswa) {
echo "Nama: " . $siswa["nama"] . ", Nilai: " . $siswa["nilai"] . "
";
}
// Foreach dengan referensi (mengubah nilai asli)
$angka = [1, 2, 3, 4, 5];
echo "
Sebelum diubah: ";
foreach ($angka as $n) {
echo "$n ";
}
// Menggunakan referensi untuk mengubah nilai
foreach ($angka as &$n) {
$n *= 2;
}
echo "
Setelah diubah: ";
foreach ($angka as $n) {
echo "$n ";
}
?>
Kontrol Flow
PHP menyediakan beberapa statement untuk mengontrol alur eksekusi dalam loop dan fungsi.
Break Statement
Break digunakan untuk menghentikan eksekusi loop atau switch statement.
<?php
// Break dalam for loop
echo "Mencari angka 7:
";
for ($i = 1; $i <= 10; $i++) {
if ($i == 7) {
echo "Angka 7 ditemukan! Menghentikan loop.
";
break;
}
echo "Angka: $i
";
}
// Break dalam nested loop
echo "
Break dalam nested loop:
";
for ($i = 1; $i <= 3; $i++) {
echo "Loop luar: $i
";
for ($j = 1; $j <= 5; $j++) {
if ($j == 3) {
echo " Breaking inner loop at j = $j
";
break;
}
echo " Loop dalam: $j
";
}
}
// Break dengan level (menghentikan multiple nested loops)
echo "
Break dengan level:
";
for ($i = 1; $i <= 3; $i++) {
for ($j = 1; $j <= 3; $j++) {
if ($i == 2 && $j == 2) {
echo "Breaking both loops at i=$i, j=$j
";
break 2; // Break 2 level loop
}
echo "i=$i, j=$j
";
}
}
?>
Continue Statement
Continue digunakan untuk melewati iterasi saat ini dan melanjutkan ke iterasi berikutnya.
<?php
// Continue dalam for loop
echo "Angka ganjil dari 1 sampai 10:
";
for ($i = 1; $i <= 10; $i++) {
if ($i % 2 == 0) {
continue; // Skip angka genap
}
echo "Angka ganjil: $i
";
}
// Continue dalam foreach
$angka = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
echo "
Memproses array, skip angka yang habis dibagi 3:
";
foreach ($angka as $n) {
if ($n % 3 == 0) {
echo "Skipping $n (habis dibagi 3)
";
continue;
}
echo "Processing: $n
";
}
// Continue dengan level
echo "
Continue dengan level:
";
for ($i = 1; $i <= 3; $i++) {
echo "Loop luar: $i
";
for ($j = 1; $j <= 3; $j++) {
if ($j == 2) {
echo " Continuing outer loop from inner
";
continue 2; // Continue outer loop
}
echo " Loop dalam: $j
";
}
echo "Setelah inner loop
";
}
?>
Return Statement
Return digunakan untuk menghentikan eksekusi fungsi dan mengembalikan nilai.
<?php
// Return dalam fungsi
function cariAngka($array, $target) {
foreach ($array as $index => $value) {
if ($value == $target) {
return $index; // Mengembalikan indeks dan menghentikan fungsi
}
}
return -1; // Tidak ditemukan
}
$angka = [10, 20, 30, 40, 50];
$hasil = cariAngka($angka, 30);
if ($hasil != -1) {
echo "Angka 30 ditemukan pada indeks: $hasil
";
} else {
echo "Angka 30 tidak ditemukan
";
}
// Return dengan multiple values
function hitungStatistik($array) {
if (empty($array)) {
return [0, 0, 0]; // min, max, rata-rata
}
$min = min($array);
$max = max($array);
$average = array_sum($array) / count($array);
return [$min, $max, $average];
}
$data = [85, 92, 78, 96, 88];
list($min, $max, $avg) = hitungStatistik($data);
echo "
Statistik nilai:
";
echo "Minimum: $min
";
echo "Maximum: $max
";
echo "Rata-rata: " . number_format($avg, 2) . "
";
// Early return untuk validasi
function validateAge($age) {
if (!is_numeric($age)) {
return "Error: Umur harus berupa angka";
}
if ($age < 0) {
return "Error: Umur tidak boleh negatif";
}
if ($age > 150) {
return "Error: Umur terlalu besar";
}
return "Valid";
}
echo "
Validasi umur:
";
echo validateAge(25) . "
";
echo validateAge(-5) . "
";
echo validateAge("abc") . "
";
?>
Goto Statement (Tidak Direkomendasikan)
PHP mendukung goto statement, tetapi penggunaannya tidak direkomendasikan karena dapat membuat kode sulit dipahami.
<?php
// Contoh goto (tidak direkomendasikan dalam praktik)
$i = 0;
start:
echo "Iterasi: $i
";
$i++;
if ($i < 3) {
goto start;
}
echo "Selesai
";
// Lebih baik menggunakan loop
echo "
Cara yang lebih baik:
";
for ($j = 0; $j < 3; $j++) {
echo "Iterasi: $j
";
}
echo "Selesai
";
?>
Peringatan: Hindari penggunaan goto statement karena dapat membuat kode menjadi tidak terstruktur dan sulit di-debug. Gunakan loop dan fungsi sebagai gantinya.