| 函數 | 用途 | 返回值 |
|---|---|---|
array_key_exists() | 檢查鍵是否存在 | bool |
array_search() | 搜索值並返回對應鍵 | mixed (鍵) / false |
array_keys() | 獲取所有鍵(可按值篩選) | array |
array_values() | 獲取所有值並重建數字索引 | array |
嚴格檢查鍵是否存在,不轉換類型。注意:PHP 8.0+ 推薦使用 $arr['key'] ?? null 或 isset($arr['key'])(性能更好),但 isset() 會對 null 值返回 false。
$states = [
'Delaware' => 'December 7, 1787',
'Pennsylvania' => 'December 12, 1787',
'Ohio' => 'March 1, 1803'
];
if (array_key_exists('Ohio', $states)) {
printf('Ohio 加入聯邦時間:%s', $states['Ohio']);
}
返回第一個匹配值的鍵。若需所有匹配鍵,請使用 array_keys($arr, $value)。
$founded = array_search('December 7', $states);
if ($founded) {
printf('%s 成立於 %s', $founded, $states[$founded]);
}
// 輸出:Delaware 成立於 December 7
$keys = array_keys($states);
// ['Delaware', 'Pennsylvania', 'Ohio']
// 帶值篩選:僅獲取值為 'December 7, 1787' 的鍵
$keys = array_keys($states, 'December 7, 1787');
重建 0 起始的數字索引,適用於需按順序遍歷、輸出 JSON 數組的場景。
$population = ['Ohio' => '11,421,267', 'Iowa' => '2,936,760'];
$vals = array_values($population);
// ['11,421,267', '2,936,760']
$capitals = ['Ohio' => 'Columbus', 'Iowa' => 'Des Moines'];
while ($key = key($capitals)) {
echo $key . '<br>';
next($capitals); // 移動指針
}
// 僅值
foreach ($arr as $val) { ... }
// 鍵值對
foreach ($arr as $key => $val) { ... }
// 引用修改原值
foreach ($arr as &$val) { $val *= 2; }
unset($val); // 釋放引用
function deepTraverse($arr, $depth = 0) {
foreach ($arr as $k => $v) {
echo str_repeat(' ', $depth) . "$k => ";
if (is_array($v)) {
echo PHP_EOL;
deepTraverse($v, $depth + 1);
} else {
echo $v . PHP_EOL;
}
}
}
in_array() 大數組中極慢(O(n)),頻繁查找請翻轉鍵值用 isset($flip[$val])(O(1))。array_search() 嚴格模式(第三參數 true)避免類型轉換陷阱(如 0 == 'abc')。