首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP in_array() 函式:陣列搜尋值是否存在

     編輯:PHP 相關知識

語法

bool in_array(mixed $needle, array $haystack, bool $strict = false)

參數說明

  • $needle:搜尋的值
  • $haystack:目標陣列
  • $strict:true 時同時比較**型別** (預設 false 僅比較值)

基本範例

$os = ['Mac', 'NT', 'Irix', 'Linux'];

var_dump(in_array('Irix', $os));        // true
var_dump(in_array('mac', $os));         // false (區分大小寫)
var_dump(in_array('mac', $os, true));   // false

// 型別嚴格模式
var_dump(in_array(0, ['apple', 'banana']));       // true! 字串轉整數為 0
var_dump(in_array(0, ['apple', 'banana'], true)); // false (型別不同)

多維陣列搜尋

$users = [
    ['id'=>1, 'name'=>'Alice'],
    ['id'=>2, 'name'=>'Bob'],
];

// 方法 1: array_column + in_array (PHP 5.5+)
$names = array_column($users, 'name');
var_dump(in_array('Alice', $names)); // true

// 方法 2: 自訂遞迴搜尋
function in_array_r($needle, $haystack, $strict=false) {
    foreach ($haystack as $item) {
        if (is_array($item)) {
            if (in_array_r($needle, $item, $strict)) return true;
        } elseif (($strict && $item === $needle) || (!$strict && $item == $needle)) {
            return true;
        }
    }
    return false;
}

效能考量

陣列大小in_arrayisset/array_key_exists建議
< 100可接受極快直接用
100 - 10,000明顯變慢 O(n)O(1)改用鍵名查找
> 10,000嚴重效能問題O(1)重構為關聯陣列/資料庫查詢

優化技巧

// 將值轉為鍵名 (去重 + O(1) 查找)
$lookup = array_flip($largeArray); // 或 array_fill_keys($largeArray, true)
isset($lookup[$needle]); // 極快

// 陣列不變、頻繁查找:建立一次快取
static $cache = null;
if ($cache === null) $cache = array_flip($largeArray);
return isset($cache[$needle]);

相關函式

  • array_search($needle, $haystack, $strict):回傳**鍵名** (找不到回傳 false)
  • array_key_exists($key, $array):檢查**鍵名** 是否存在
  • isset($array[$key]):檢查鍵名存在且值非 null (最快)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved