Data dunia nyata jarang berdiri sendiri: satu pesanan berisi banyak barang, satu siswa punya banyak nilai, satu formulir punya banyak kolom. Tipe array adalah struktur PHP untuk mengelompokkan data tersebut — dan merupakan tipe yang paling sering Anda pakai sehari-hari. Pada Chapter ini kita memandang array sebagai tipe data: satu jenis nilai yang melayani daftar berindex sekaligus pemetaan berlabel, dengan aturan konversi key yang perlu dipahami agar tidak tertipu. Operasi lengkap array (sorting, penggabungan, iterasi) mendapat section tersendiri.

Satu Tipe untuk Daftar dan Pemetaan #

PHP hanya punya satu tipe array, tetapi array itu bisa dipakai dalam dua gaya. Gaya pertama adalah daftar berurutan yang key-nya angka berurutan (indexed array); gaya kedua adalah pemetaan label ke nilai (associative array). Keduanya — termasuk campurannya — tetap bertipe array:

php
<?php
$nilaiUjian = [80, 75, 90];
$profil = ["nama" => "Siti", "kota" => "Bandung"];
$campuran = [1 => "satu", "nama" => "Budi", 5];

var_dump($nilaiUjian, $profil, $campuran);
var_dump(is_array($nilaiUjian), is_array($profil), is_array($campuran));

Output yang Dihasilkan:

text
array(3) {
  [0]=>
  int(80)
  [1]=>
  int(75)
  [2]=>
  int(90)
}
array(2) {
  ["nama"]=>
  string(4) "Siti"
  ["kota"]=>
  string(7) "Bandung"
}
array(3) {
  [1]=>
  string(4) "satu"
  ["nama"]=>
  string(4) "Budi"
  [2]=>
  int(5)
}
bool(true)
bool(true)
bool(true)

var_dump() menampilkan setiap pasangan key => nilai, dan is_array() mengembalikan true untuk ketiganya — tidak ada perbedaan tipe antara indexed, associative, maupun campuran. Perhatikan array $campuran: dua entri pertama diberi key 1 dan "nama" secara eksplisit, lalu nilai 5 diletakkan tanpa key sehingga PHP memilihkan key 2 — angka bulat terkecil yang belum dipakai setelah key numerik terbesar (di sini 1).

Array adalah Ordered Map #

Dokumentasi resmi PHP menyebut array sebagai ordered map: pemetaan dari key ke nilai yang menjaga urutan penyisipan. Urutan itu tetap terpelihara berapa pun bentuk key-nya — bukan diurutkan berdasarkan angka atau abjad:

php
<?php
$daftar = [];
$daftar[] = "pertama";
$daftar[] = "kedua";
$daftar["tanda"] = "penting";
$daftar[] = "ketiga";

var_dump($daftar);

Output yang Dihasilkan:

text
array(4) {
  [0]=>
  string(7) "pertama"
  [1]=>
  string(5) "kedua"
  ["tanda"]=>
  string(7) "penting"
  [2]=>
  string(6) "ketiga"
}

Empat entri tampil persis dalam urutan penulisan kode: 0, 1, "tanda", lalu 2. Penambahan dengan $daftar[] selalu menempel di posisi paling akhir dengan key numerik yang melanjutkan key angka terbesar yang sudah ada. Sifat ordered inilah yang membuat array PHP aman dipakai untuk daftar yang maknanya melekat pada urutan — antrean, langkah resep, riwayat transaksi.

Aturan Konversi Key #

Key array diperbolehkan bertipe int atau string saja. Ketika Anda memakai tipe lain sebagai key, PHP mengonversinya secara otomatis — dan aturan konversinya sering mengejutkan:

php
<?php
$skor = [];
$skor["5"] = "string lima";
$skor["08"] = "string nol delapan";
$skor[true] = "boolean true";
$skor[null] = "null";

var_dump(array_keys($skor));

Output yang Dihasilkan:

text
array(4) {
  [0]=>
  int(5)
  [1]=>
  string(2) "08"
  [2]=>
  int(1)
  [3]=>
  string(0) ""
}

Hasil array_keys() membuktikan konversinya: string "5" berubah menjadi key integer 5, boolean true menjadi integer 1, dan null menjadi string kosong "". Aturan lengkapnya demikian:

Key yang ditulisKey yang tersimpan
"5" (string numerik valid)integer 5
"08" (oktal tidak valid)tetap string "08"
"1.5" (bukan bilangan bulat)tetap string "1.5"
true / falseinteger 1 / 0
nullstring kosong ""
3.7 (float)integer 3, dengan Deprecated sejak PHP 8.1 karena memotong pecahan

Konversi "5" menjadi 5 adalah yang paling sering dijumpai — data angka dari formulir atau JSON tiba sebagai string, lalu menjadi key integer begitu masuk array. Sebaliknya "08" dan "1.5" tetap string karena bukan representasi bilangan bulat yang sah. Key float dengan pecahan seperti 3.7 dipotong menjadi 3 disertai peringatan deprecated, karena pemotongan itu kehilangan informasi.

Menghitung, Menyusun, dan Mengakses #

Fungsi count() mengembalikan jumlah entri array, dan array bisa bersarang (nested) hingga kedalaman berapa pun — array di dalam array:

php
<?php
$siswa = [
    "nama" => "Budi",
    "nilai" => ["matematika" => 85, "fisika" => 90],
];

var_dump(count($siswa));
var_dump($siswa["nilai"]["matematika"]);
var_dump(array_is_list([10, 20, 30]));
var_dump(array_is_list(["nama" => "Budi"]));

Output yang Dihasilkan:

text
int(2)
int(85)
bool(true)
bool(false)

Array $siswa berisi dua entri (nama dan nilai) — array dalam nilai dihitung sebagai satu nilai tunggal. Akses berantai $siswa["nilai"]["matematika"] menembus dua lapis untuk mengambil 85. Fungsi array_is_list() (PHP 8.1) memeriksa apakah sebuah array berbentuk daftar murni: key numerik berurutan mulai nol — true untuk [10, 20, 30], false untuk array berlabel.

Membaca key yang tidak ada adalah kesalahan paling umum saat bekerja dengan array. Di PHP 8, akses seperti $profil["email"] pada key yang belum pernah diisi memicu Warning: Undefined array key (nilainya tetap null dan program berlanjut). Pola yang aman sudah kita kenal dari Chapter null — operator ??:

php
<?php
$profil = ["nama" => "Siti"];

var_dump($profil["nama"]);
var_dump($profil["email"] ?? "belum diisi");

Output yang Dihasilkan:

text
string(4) "Siti"
string(11) "belum diisi"

Operator ?? mengembalikan nilai cadangan ketika key tidak ada, sekaligus menenangkan warning-nya. Untuk memeriksa keberadaan key yang nilainya boleh null, gunakan array_key_exists() seperti pada chapter sebelumnya.

Ringkasan #

Array PHP adalah ordered map yang menjaga urutan penyisipan: gaya indexed, associative, dan campurannya sama-sama bertipe array. Key hanya boleh int atau string; tipe lain dikonversi mengikuti aturan tetap — "5" menjadi 5, true menjadi 1, null menjadi "". Fungsi count(), akses berantai untuk array bersarang, serta ?? untuk key yang mungkin hilang menutup kebutuhan dasarnya. Setelah array yang menyimpan banyak nilai, kita bertemu tipe yang menyimpan data beserta perilakunya: object.

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 Chapter Arrays
// Jalankan dengan: php contoh.php

echo "== Tiga gaya, satu tipe ==\n";
$nilaiUjian = [80, 75, 90];
$profil = ["nama" => "Siti", "kota" => "Bandung"];
$campuran = [1 => "satu", "nama" => "Budi", 5];
var_dump($nilaiUjian, $profil, $campuran);
var_dump(is_array($nilaiUjian), is_array($profil), is_array($campuran));

echo "\n== Ordered map: urutan penyisipan terjaga ==\n";
$daftar = [];
$daftar[] = "pertama";
$daftar[] = "kedua";
$daftar["tanda"] = "penting";
$daftar[] = "ketiga";
var_dump($daftar);

echo "\n== Konversi key ==\n";
$skor = [];
$skor["5"] = "string lima";
$skor["08"] = "string nol delapan";
$skor[true] = "boolean true";
$skor[null] = "null";
var_dump(array_keys($skor));

echo "\n== count, akses berantai, dan array_is_list ==\n";
$siswa = [
    "nama" => "Budi",
    "nilai" => ["matematika" => 85, "fisika" => 90],
];
var_dump(count($siswa));
var_dump($siswa["nilai"]["matematika"]);
var_dump(array_is_list([10, 20, 30]), array_is_list(["nama" => "Budi"]));

echo "\n== Akses aman dengan ?? ==\n";
var_dump($profil["nama"]);
var_dump($profil["email"] ?? "belum diisi");