首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

PHP array_search 陷阱:回傳鍵值非布林值導致誤判

     編輯:程式設計綜合問答

PHP array_search() 若找到值,回傳對應的鍵名(索引),而非 true。當值位於索引 0 時,回傳 0,在 if 判斷中會被視為 false,導致邏輯錯誤。

錯誤示範

$arr = [1, 2];
if (array_search(1, $arr)) { // 回傳 0 -> false
    echo 'yes';
} else {
    echo 'no'; // 實際輸出 no,但值明明存在!
}

正確做法:使用嚴格比較或改用 in_array()

// 方法 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 關鍵字補充

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 並嚴格比較。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved