函數簡介
in_array() 是 PHP 內建函數,用於檢查指定值是否存在於陣列中。語法簡單但細節較多(如型別比較、大小寫敏感),本文透過範例詳細說明。
語法與參數
bool in_array(mixed $needle, array $haystack [, bool $strict = FALSE ])
| 參數 | 說明 |
$needle | 要搜尋的值,字串時區分大小寫 |
$haystack | 被搜尋的陣列 |
$strict | 可選,true 時同時比較值與型別(預設 false) |
範例 1:基本用法與大小寫敏感
<?php
$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
echo "Got Irix"; // 輸出
}
if (in_array("mac", $os)) {
echo "Got mac"; // 不輸出,區分大小寫
}
?>
範例 2:中文內容搜尋
<?php
$europe = array("美國", "英國", "法國", "德國", "意大利", "西班牙", "丹麥");
if (in_array("美國", $europe)) {
echo "True"; // 輸出 True
}
?>
範例 3:嚴格模式(strict = true)
<?php
$a = array('1.10', 12.4, 1.13);
if (in_array('12.4', $a, true)) {
echo "'12.4' found with strict check"; // 不輸出,字串 vs 數值
}
if (in_array(1.13, $a, true)) {
echo "1.13 found with strict check"; // 輸出,型別值皆符合
}
?>
範例 4:多維陣列搜尋
<?php
$a = array(array('p', 'h'), array('p', 'r'), 'o');
if (in_array(array('p', 'h'), $a)) {
echo "'ph' was found"; // 輸出
}
if (in_array(array('f', 'i'), $a)) {
echo "'fi' was found"; // 不輸出
}
if (in_array('o', $a)) {
echo "'o' was found"; // 輸出
}
?>
常見陷阱與最佳實務
- 效能:大陣列(>1000 元素)建議改用
isset($arr[$key]) 或 array_flip() 後查鍵值,複雜度 O(1)
- 型別轉換:非嚴格模式下
0 == 'abc' 為 true,易產生誤判,建議習慣加上 true
- PHP 5.4+:陣列語法可用短陣列
[] 取代 array()
替代方案
| 需求 | 建議函數 |
| 取得鍵值 | array_search() |
| 檢查鍵名存在 | array_key_exists() 或 isset() |
| 大量重複查詢 | array_flip() + isset() |