PHP array_search() 若找到值,回傳對應的鍵名(索引),而非 true。當值位於索引 0 時,回傳 0,在 if 判斷中會被視為 false,導致邏輯錯誤。
$arr = [1, 2];
if (array_search(1, $arr)) { // 回傳 0 -> false
echo 'yes';
} else {
echo 'no'; // 實際輸出 no,但值明明存在!
}
// 方法 1:嚴格比較 !== false
if (array_search(1, $arr) !== false) { echo 'yes'; }
// 方法 2:直接檢查值是否存在(推薦)
if (in_array(1, $arr)) { echo 'yes'; }
// 方法 3:檢查鍵名是否存在
if (array_key_exists($key, $arr)) { ... }
global $var 將函式內的變數引用指向全域同名變數。若需在函式內修改全域陣列,必須宣告 global $arr;否則函式內的 $arr 為區域變數,修改不影響外部。範例:
$arr = [];
function main() {
global $arr; // 關鍵:宣告使用全域 $arr
array_push($arr, '1');
}
main();
print_r($arr); // 輸出 Array ( [0] => 1 )
| 函式 | 用途 | 回傳值 |
|---|---|---|
array_search | 搜尋值並取得鍵名 | 鍵名 / false |
in_array | 檢查值是否存在 | true / false |
array_key_exists | 檢查鍵名是否存在 | true / false |
記住:檢查存在性用 in_array,需要鍵名才用 array_search 並嚴格比較。