在使用 PHP 的 in_array
函數(shù)時(shí),有一些常見(jiàn)的錯(cuò)誤可能會(huì)導(dǎo)致意外的結(jié)果或行為
in_array
函數(shù)的參數(shù)是正確的。in_array
的第一個(gè)參數(shù)應(yīng)該是要搜索的值(needle),第二個(gè)參數(shù)應(yīng)該是數(shù)組(haystack)。$array = array("apple", "banana", "cherry");
if (in_array("apple", $array)) {
echo "Found apple!";
}
in_array
默認(rèn)是區(qū)分大小寫的。如果需要不區(qū)分大小寫的搜索,請(qǐng)將第三個(gè)參數(shù)設(shè)置為 true
。$array = array("Apple", "Banana", "Cherry");
if (in_array("apple", $array, true)) {
echo "Found apple!";
}
in_array
只檢查數(shù)組的值,而不檢查鍵名。如果需要檢查鍵名,請(qǐng)使用 array_key_exists
函數(shù)。$array = array("a" => "apple", "b" => "banana", "c" => "cherry");
if (array_key_exists("a", $array)) {
echo "Found apple!";
}
in_array
可能會(huì)因?yàn)轭愋娃D(zhuǎn)換而產(chǎn)生意外的結(jié)果。例如,當(dāng)數(shù)組中包含零(0)或空字符串時(shí),它們可能會(huì)被誤認(rèn)為是相等的。為了避免這種情況,請(qǐng)使用 in_array
的第三個(gè)參數(shù) strict
設(shè)置為 true
,以進(jìn)行嚴(yán)格類型比較。$array = array(0, 1, 2);
if (in_array("0", $array, true)) {
echo "Found zero!";
} else {
echo "Zero not found.";
}
in_array
不能直接用于搜索對(duì)象數(shù)組。如果需要在對(duì)象數(shù)組中搜索特定屬性的值,可以使用 array_filter
函數(shù)配合匿名函數(shù)實(shí)現(xiàn)。class Fruit {
public $name;
public function __construct($name) {
$this->name = $name;
}
}
$fruits = array(
new Fruit("apple"),
new Fruit("banana"),
new Fruit("cherry")
);
$searchName = "apple";
$found = array_filter($fruits, function ($fruit) use ($searchName) {
return $fruit->name === $searchName;
});
if (!empty($found)) {
echo "Found apple!";
}
遵循上述建議,可以避免在使用 PHP 的 in_array
函數(shù)時(shí)出現(xiàn)常見(jiàn)錯(cuò)誤。