需求:給定關聯數組 ['a'=>1, 'b'=>2, 'c'=>3, 'd'=>4, 'e'=>5],從鍵 'c' 開始循環輸出。本文展示最簡潔的標準庫實現。
$arr = ['a'=>1, 'b'=>2, 'c'=>3, 'd'=>4, 'e'=>5];
$startKey = 'c';
// 1. 獲取目標鍵在數組中的數值索引位置
$index = array_search($startKey, array_keys($arr));
// 2. 從該位置截取子數組(保留鍵名)
$subArr = array_slice($arr, $index, null, true); // 第4參數 true 保留鍵
// 3. 遍歷輸出
foreach ($subArr as $key => $val) {
echo "$key = $val\n";
}
/* 輸出:
c = 3
d = 4
e = 5
*/
array_keys($arr) → ['a','b','c','d','e'] 獲取所有鍵組成的索引數組。array_search($startKey, ...) → 在鍵數組中查找目標鍵,返回其數值索引位置(此處為 2)。array_slice($arr, $index, null, true) → 從位置 2 截取到結尾,true 保證鍵名不重置為 0,1,2...if ($index === false) {
// 鍵不存在:拋出異常、返回空數組、或從頭開始,根據業務決定
throw new InvalidArgumentException("Key '$startKey' not found");
}
| 方法 | 代碼量 | 性能 | 可讀性 |
|---|---|---|---|
| array_search + array_slice | 少 | O(n) 查找 + O(n) 切片 | 高 |
| foreach + flag 狀態機 | 多 | O(n) 單次遍歷 | 中 |
| array_filter + 閉包捕獲狀態 | 中 | O(n) 但創建閉包開銷 | 低 |
標準庫組合拳:array_keys → array_search → array_slice,語義清晰、代碼極簡、性能足夠,是首選方案。