5-3: Associative Array
Objectives
- Memahami associative array secara mendalam
- Melakukan operasi CRUD pada associative array
- Menggunakan array dengan key yang meaningful
- Menggabungkan associative array dengan
array_merge()dan operator+ - Mengenal use case nyata: config, form data, dan HTTP headers
Deep Dive Associative Array
Associative array adalah array yang key-nya berupa string, bukan angka. Alih-alih "elemen ke-3", kita bicara "elemen dengan key email". Ini membuat kode terbaca seperti kalimat: $user["email"] — jelas maksudnya.
$user = [
"first_name" => "Andi",
"last_name" => "Pratama",
"email" => "andi@example.com",
"age" => 25,
"is_active" => true,
];
Secara visual:
| Key | Value |
|---|---|
first_name | "Andi" |
last_name | "Pratama" |
email | "andi@example.com" |
age | 25 |
is_active | true |
Setiap pasangan "key" => "value" dipisahkan koma, dan urutannya dipertahankan oleh PHP — array tidak otomatis diurutkan berdasarkan key atau value.
Operasi CRUD
CRUD singkatan dari Create, Read, Update, Delete — empat operasi dasar yang bisa dilakukan pada associative array.
<?php
// CREATE: buat array dengan data awal
$user = [
"first_name" => "Andi",
"last_name" => "Pratama",
"email" => "andi@example.com",
"age" => 25,
"is_active" => true
];
// READ: akses berdasarkan key
echo $user["first_name"]; // Output: Andi
// UPDATE: timpa nilai pada key yang sudah ada
$user["age"] = 26;
echo $user["age"]; // Output: 26
// CREATE: tambah key baru (key belum ada = create)
$user["city"] = "Jakarta";
echo $user["city"]; // Output: Jakarta
// DELETE: hapus key
unset($user["is_active"]);
var_dump(isset($user["is_active"])); // Output: bool(false)
print_r($user);
// Output:
// Array
// (
// [first_name] => Andi
// [last_name] => Pratama
// [email] => andi@example.com
// [age] => 26
// [city] => Jakarta
// )
?>
Aturan penting: $user["key"] = $value bersifat upsert — jika key sudah ada, nilainya di-update; jika belum ada, key-nya dibuat. Tidak perlu cek dulu apakah key ada sebelum assign.
Nested Associative Array
Value dari associative array bisa berupa array lagi. Ini adalah cara paling umum merepresentasikan data terstruktur — misalnya daftar karyawan yang masing-masing punya skill.
<?php
$employees = [
[
"id" => 1,
"name" => "Andi",
"position" => "Developer",
"skills" => ["PHP", "JavaScript", "SQL"]
],
[
"id" => 2,
"name" => "Budi",
"position" => "Designer",
"skills" => ["Figma", "CSS", "Illustrator"]
]
];
// Access nested
echo $employees[0]["name"]; // Output: Andi
echo $employees[0]["skills"][0]; // Output: PHP
// Loop nested
foreach ($employees as $emp) {
echo "{$emp['name']} - {$emp['position']}\n";
echo "Skills: " . implode(", ", $emp["skills"]) . "\n";
}
// Output:
// Andi - Developer
// Skills: PHP, JavaScript, SQL
// Budi - Designer
// Skills: Figma, CSS, Illustrator
?>
Struktur seperti ini persis dengan bentuk data JSON dari API — itulah kenapa PHP dan JSON "berteman baik": json_encode() untuk mengirim, json_decode() untuk menerima.
<?php
// Dari PHP ke JSON
$data = ["name" => "Andi", "age" => 25];
echo json_encode($data);
// Output: {"name":"Andi","age":25}
// Dari JSON ke PHP (asosiatif array)
$json = '{"name":"Budi","age":30}';
$decoded = json_decode($json, true); // true = jadikan array, bukan object
echo $decoded["name"]; // Output: Budi
?>
Common Operations
Associative array punya banyak function pendukung. Yang paling sering dipakai: array_merge(), array_keys(), array_values(), dan operator +.
Menggabungkan Array
Ada dua cara menggabungkan associative array, dan hasilnya berbeda saat ada key yang sama:
<?php
$defaults = [
"debug" => false,
"log_level" => "error",
"timeout" => 30
];
$userConfig = [
"debug" => true, // key sama dengan defaults
"db_host" => "localhost"
];
// array_merge(): key yang muncul belakangan MENANG
$config = array_merge($defaults, $userConfig);
print_r($config);
// Output:
// Array
// (
// [debug] => true <-- dari $userConfig, menimpa
// [log_level] => error <-- dari $defaults
// [timeout] => 30 <-- dari $defaults
// [db_host] => localhost <-- dari $userConfig
// )
// Operator + : key yang muncul pertama MENANG
$config2 = $defaults + $userConfig;
print_r($config2);
// Output:
// Array
// (
// [debug] => false <-- dari $defaults, userConfig diabaikan
// [log_level] => error
// [timeout] => 30
// [db_host] => localhost <-- key baru tetap masuk
// )
?>
array_merge($a, $b) dan $a + $b menghasilkan urutan prioritas yang berlawanan. Untuk array string-key: array_merge — yang belakangan menang; operator + — yang pertama menang. Pilih sesuai kebutuhan, dan jangan sampai tertukar.
Pola array_merge($defaults, $userConfig) sangat umum dipakai untuk menggabungkan konfigurasi default dengan konfigurasi user.
Mengambil Key dan Value
<?php
$config = [
"db_host" => "localhost",
"db_name" => "myapp",
"db_user" => "root",
"db_pass" => "",
"debug" => true
];
// Get all keys
$keys = array_keys($config);
print_r($keys);
// Output: Array ( [0] => db_host [1] => db_name [2] => db_user [3] => db_pass [4] => debug )
// Get all values
$values = array_values($config);
print_r($values);
// Output: Array ( [0] => localhost [1] => myapp [2] => root [3] => [4] => 1 )
// Check if key exists
if (array_key_exists("db_host", $config)) {
echo "DB Host: {$config['db_host']}"; // Output: DB Host: localhost
}
// Safe access dengan null coalescing
$timeout = $config["timeout"] ?? 30;
echo $timeout; // Output: 30 (key timeout tidak ada, pakai default)
?>
array_keys() dan array_values() adalah jembatan antara associative array dan indexed array. Setelah diambil, hasilnya bisa di-loop dengan for biasa, di-sort, atau dikirim ke function yang butuh indexed array.
Use Case Nyata
1. Konfigurasi Aplikasi
<?php
$config = [
"db_host" => "localhost",
"db_name" => "myapp",
"db_user" => "root",
"db_pass" => "",
"debug" => true
];
// Merge defaults + config
$defaults = ["debug" => false, "log_level" => "error"];
$config = array_merge($defaults, $config);
echo $config["log_level"]; // Output: error (dari defaults)
// Loop untuk menampilkan semua config
foreach ($config as $key => $value) {
echo "$key = $value\n";
}
// Output:
// debug = 1
// log_level = error
// db_host = localhost
// db_name = myapp
// db_user = root
// db_pass =
?>
2. Data dari Form (mirip $_POST)
<?php
// PHP otomatis menyimpan data form ke $_POST
// Bentuknya persis associative array seperti ini:
$_POST = [
"username" => "andi123",
"email" => "andi@example.com",
"password" => "rahasia"
];
// Validasi sederhana
$errors = [];
if (empty($_POST["username"])) {
$errors["username"] = "Username wajib diisi";
}
if (!filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)) {
$errors["email"] = "Format email salah";
}
print_r($errors);
// Output:
// Array
// (
// [email] => Format email salah
// )
?>
3. HTTP Headers
<?php
$headers = [
"Content-Type" => "application/json",
"Authorization" => "Bearer token123",
"Accept" => "application/json"
];
// Cek header tertentu dengan cara case-insensitive
foreach ($headers as $name => $value) {
echo "$name: $value\n";
}
// Output:
// Content-Type: application/json
// Authorization: Bearer token123
// Accept: application/json
?>
Common Mistakes
| Mistake | Contoh Salah | Kenapa Salah | Solusi |
|---|---|---|---|
Tertukar urutan => | "Andi" => "name" | Key harus di kiri, value di kanan | Tulis "name" => "Andi" |
| Mengira key otomatis diurutkan | foreach mengharap urutan alfabet | PHP mempertahankan urutan insert | Urutkan eksplisit dengan ksort() |
| Akses key tanpa cek | echo $user["city"]; tanpa tahu ada/tidak | Warning "Undefined array key" | $user["city"] ?? "Tidak ada" |
array_merge vs + tertukar | mengharap key user menang dengan + | + mempertahankan key yang pertama | Gunakan array_merge jika key belakangan harus menang |
Menaruh logika rumit di dalam foreach | loop 1000x memanggil count() di dalam | Boros dan lambat | Hitung di luar loop |
Exercise
- Buat database configuration sebagai associative array
- Loop dan print semua key-value pairs dengan format
key = value - Buat nested array untuk cart shopping (items, quantities, prices)
- Buat array
$defaultsdan$userSettingsdengan satu key yang sama, lalu bandingkan hasilarray_merge()vs operator+ - Gunakan
array_merge()untuk membuat config final: defaults yang bisa di-override oleh user settings - Ubah associative array menjadi JSON dengan
json_encode(), lalu decode kembali denganjson_decode($json, true)dan akses salah satu key-nya
Summary
| Konsep | Penjelasan |
|---|---|
| Associative array | Array dengan key string, ditulis "key" => "value" |
| CRUD | Create ($a["k"] = v), Read ($a["k"]), Update (assign ulang), Delete (unset($a["k"])) |
| Nested array | Value berupa array lagi; cocok untuk data JSON |
array_merge($a, $b) | Gabungkan; key di $b menimpa key yang sama di $a |
$a + $b | Gabungkan; key di $a menang, key baru dari $b tetap masuk |
array_keys($arr) | Ambil semua key sebagai indexed array |
array_values($arr) | Ambil semua value sebagai indexed array |
array_key_exists($k, $arr) | Cek keberadaan key (termasuk yang nilainya null) |
$arr[$k] ?? $default | Akses aman dengan nilai fallback |
json_encode() / json_decode() | Konversi antara PHP array dan JSON |
Klik tombol ini setelah menyelesaikan materi
Quiz Bab 5
Uji pemahamanmu tentang Array