Array adalah satu variabel yang menyimpan banyak nilai sekaligus. Bayangin buku Bu Tini. Satu halaman berisi daftar pesanan hari ini, bernomor sesuai urutan datang: itu indexed array. Halaman lain berisi papan menu, nama menu di kiri dan harganya di kanan: itu associative array. Daripada membuat $pesanan1, $pesanan2, $pesanan3, kamu cukup punya satu $pesanan.
🧪 Tebakan cepat:
$pesananberisi 3 pesanan. Pesanan terakhir diambil dengan$pesanan[3]? Tebak dulu, jawabannya ada di bagian "Indexed array: nomornya mulai dari 0".
Indexed array: nomornya mulai dari 0
<?php
$pesanan = ["Nasi Goreng", "Mie Ayam", "Es Teh"];
echo $pesanan[0] . "\n";
echo count($pesanan) . "\n";
echo $pesanan[count($pesanan) - 1] . "\n";
Nasi Goreng
3
Es Teh
| Indeks | [0] |
[1] |
[2] |
|---|---|---|---|
| Isi | Nasi Goreng | Mie Ayam | Es Teh |
- Array ditulis di dalam kurung siku, isinya dipisah koma.
- Tiap isi punya nomor, namanya indeks, dan nomornya mulai dari 0.
$pesanan[0]adalah isi pertama. count($pesanan)menghitung jumlah isinya: 3.- Isi terakhir ada di indeks
count($pesanan) - 1, yaitu 2.$pesanan[3]gak ada: PHP memberiWarning: Undefined array key 3dan menulis kosong. Itu jawaban tebakannya.
Menambah dan mengubah isi
<?php
$pesanan = ["Nasi Goreng", "Mie Ayam", "Es Teh"];
$pesanan[] = "Kerupuk";
$pesanan[1] = "Bakso";
array_push($pesanan, "Teh Tarik");
echo count($pesanan);
5
$pesanan[] = "Kerupuk";(kurung siku kosong) menambah isi baru di ujung, dengan indeks berikutnya, 3.$pesanan[1] = "Bakso";menimpa isi di indeks 1: Mie Ayam jadi Bakso.array_push($pesanan, "Teh Tarik")sama dengan$pesanan[] = "Teh Tarik".- Karena
countikut bertambah,$pesanan[count($pesanan) - 1]selalu mengambil isi terakhir, berapa pun isinya.
Associative array: nama sebagai kunci
<?php
$harga = [
"Nasi Goreng" => 15000,
"Mie Ayam" => 12000,
"Es Teh" => 5000,
];
echo $harga["Es Teh"] . "\n";
$harga["Kerupuk"] = 2000;
echo count($harga);
5000
4
=>memasangkan kunci (kiri) dengan nilai (kanan). Kuncinya biasanya string.- Nilai diambil lewat kuncinya:
$harga["Es Teh"]menjawab 5000. Dengan cara yang sama, di$arr = ["a" => 1, "b" => 2],$arr["b"]menjawab 2. - Kunci baru menambah isi:
$harga["Kerupuk"] = 2000;. Kunci yang sudah ada menimpa nilainya.
Melihat isi: print_r dan var_dump
echo gak bisa menulis array: echo $pesanan; memberi Warning: Array to string conversion lalu kata Array. Untuk melihat isinya:
print_r($harga);
Array
(
[Nasi Goreng] => 15000
[Mie Ayam] => 12000
[Es Teh] => 5000
[Kerupuk] => 2000
)
print_rmenulis tiap kunci dan nilainya, enak dibaca.var_dump($pesanan)menulis jumlah isinya (array(3) {), lalu indeks, tipe dan panjang tiap isi, misalnyastring(11) "Nasi Goreng". Pakai ini saat memeriksa.
foreach: satu per satu
foreach ($harga as $menu => $h) {
echo "$menu: Rp$h\n";
}
Nasi Goreng: Rp15000
Mie Ayam: Rp12000
Es Teh: Rp5000
Kerupuk: Rp2000
foreach menjalankan isi kurung kurawalnya sekali untuk tiap isi array: $menu berisi kuncinya, $h nilainya. Untuk indexed array cukup foreach ($pesanan as $p). Loop dibahas lengkap di lesson Loop.
🤔 Kunci "1" jadi 1
$meja = ["1" => "Budi", 1 => "Sari"];
echo count($meja); // 1
String yang isinya bilangan bulat biasa, seperti "1", dipakai PHP sebagai kunci int. Jadi dua kunci di atas sama-sama 1, dan "Sari" menimpa "Budi". "01" tetap kunci string karena ada 0 di depannya, dan true jadi kunci 1.
🤔 Mengubah isi di dalam foreach
$harga = [15000, 12000, 5000];
foreach ($harga as $h) {
$h = $h + 1000; // salinan, $harga gak berubah
}
foreach ($harga as $i => $h) {
$harga[$i] = $h + 1000; // [16000, 13000, 6000]
}
$hcuma salinan. Untuk mengubah array-nya, tulis lewat indeks:$harga[$i] = ....- Ada juga
foreach ($harga as &$h):&membuat$hmenunjuk langsung ke isinya. Tapi sesudah loop,$hmasih menempel ke isi terakhir. Kalau$hdipakai lagi diforeachberikutnya, isi terakhir tertimpa:[16000, 13000, 6000]jadi[16000, 13000, 13000]. Tulisunset($h);tepat sesudah loop dengan&.
⚠️ Jebakan yang sering ketemu
- Indeks dimulai dari 0. Isi terakhir di
count($arr) - 1, bukancount($arr). - echo pada array. Yang keluar cuma
Arrayplus Warning. Pakaiprint_r,var_dump, atau ambil satu isi. - Kunci kembar. Kunci yang ditulis dua kali, termasuk
"1"dan1, menyisakan nilai terakhir saja. &tanpaunset. Reference yang tertinggal diam-diam menimpa isi terakhir di loop berikutnya.
TL;DR: Indexed array ["Nasi Goreng", "Mie Ayam", "Es Teh"] diberi nomor mulai dari 0, jadi isi pertama $arr[0] dan isi terakhir $arr[count($arr) - 1]. count() menghitung isinya, $arr[] = ... menambah di ujung. Associative array memasangkan kunci dengan nilai lewat => dan diambil lewat kuncinya, $harga["Es Teh"]. echo gak bisa menulis array, pakai print_r atau var_dump. Di foreach, $h cuma salinan: ubah lewat $arr[$i], atau kalau pakai &$h, unset($h) sesudahnya.