Associative Array มี Key เป็น String แต่ภายใน PHP เก็บลำดับการ Insert (Insertion Order) สามารถดึง Index ตำแหน่งได้
วิธีที่ 1: array_keys() + Loop (มาตรฐาน)
$arr = ['a' => '5', 'b' => '20', 'c' => '35', 'd' => '55'];
$keys = array_keys($arr);
// ['a', 'b', 'c', 'd']
for ($i = 0; $i < count($arr); $i++) {
$key = $keys[$i];
$value = $arr[$key];
echo "Index: $i, Key: $key, Value: $value\n";
}
/* Output:
Index: 0, Key: a, Value: 5
Index: 1, Key: b, Value: 20
Index: 2, Key: c, Value: 35
Index: 3, Key: d, Value: 55
*/
วิธีที่ 2: foreach กับ Key (เข้าถึง Index โดยตรง)
$arr = ['a' => '5', 'b' => '20', 'c' => '35', 'd' => '55'];
$index = 0;
foreach ($arr as $key => $value) {
echo "Index: $index, Key: $key, Value: $value\n";
$index++;
}
/* Output เหมือนข้างต้น แต่ไม่ต้อง array_keys() แยก */
วิธีที่ 3: หา Index ของ Key เฉพาะ (array_search)
$arr = ['p' => '150', 'q' => '100', 'r' => '120', 's' => '110'];
// หา Index ของ Key 'r'
$keys = array_keys($arr);
$index = array_search('r', $keys, true); // Strict Comparison
echo "Key 'r' is at index: $index"; // 2
// One-liner (PHP 7+)
$index = array_search('r', array_keys($arr), true);
วิธีที่ 4: ArrayIterator (Object-Oriented)
$arr = ['p' => '150', 'q' => '100', 'r' => '120', 's' => '110'];
$iterator = new ArrayIterator($arr);
$index = 0;
foreach ($iterator as $key => $value) {
echo "Index: $index, Key: $key, Value: $value\n";
$index++;
}
// Seek to Specific Index
$iterator->seek(2); // ไปที่ Index 2
echo "Key at index 2: " . $iterator->key(); // 'r'
echo "Value at index 2: " . $iterator->current(); // '120'
การ Update Value ผ่าน Index
$arr = ['p' => '150', 'q' => '100', 'r' => '120', 's' => '110'];
$keys = array_keys($arr);
// อัปเดต Index 3 (Key 's')
$arr[$keys[3]] = '25';
print_r($arr);
// ['p' => '150', 'q' => '100', 'r' => '120', 's' => '25']
⚠️ ข้อควรระวัง: Array Order
- PHP 7+ : Array เก็บ Insertion Order (Ordered Map)
- Key ใหม่จะเพิ่มท้ายเสมอ
array_merge,+operator รักษา Ordersort(),ksort()จะเปลี่ยน Order
$arr = ['b' => 1, 'a' => 2]; // Insert b ก่อน a
$keys = array_keys($arr); // ['b', 'a'] - รักษา Insertion Order
ksort($arr); // Sort by Key
$keys = array_keys($arr); // ['a', 'b'] - Order เปลี่ยนไป!
Benchmark
/* 100,000 Elements:
array_keys + for loop: 0.008s
foreach with counter: 0.006s <-- เร็วกว่าเล็กน้อย
ArrayIterator: 0.012s (Object Overhead)
*/