我使用in_array()来检查一个值是否存在于如下数组中,
$a = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $a))
{
echo "Got Irix";
}
//print_r($a);
但是对于一个多维数组(下面)——我如何检查这个值是否存在于多数组中?
$b = array(array("Mac", "NT"), array("Irix", "Linux"));
print_r($b);
或者我不应该使用in_array()当涉及到多维数组?
自PHP 5.6以来,原来的答案有一个更好和更干净的解决方案:
使用这样的多维数组:
$a = array(array("Mac", "NT"), array("Irix", "Linux"))
我们可以使用splat操作符:
return in_array("Irix", array_merge(...$a), true)
如果你有这样的字符串键:
$a = array("a" => array("Mac", "NT"), "b" => array("Irix", "Linux"))
你将不得不使用array_values,以避免错误不能解包数组字符串键:
return in_array("Irix", array_merge(...array_values($a)), true)
许多这样的搜索通常是为了在记录列表中查找内容,正如一些人指出的那样,这实际上是一个二维数组。
这适用于具有统一键集的记录列表),例如从数据库中获取的记录列表。
为了完整起见,这个结构包含了'in_array'和'key_exists'样式函数。两个函数都返回一个简单的true/false布尔值。
2维记录数组…
$records array:
[0] => Array
(
[first_name] => Charlie
[last_name] => Brown
)
[1] => Array
(
[first_name] => Fred
[last_name] => Sanford
)
功能:
function in_multidimensional_array($array, $column_key, $search) {
return in_array($search, array_column($array, $column_key));
}
function multidimensional_array_key_exists($array, $column_key) {
return in_array($column_key, array_keys(array_shift($array)));
}
测试:
var_dump(in_multidimensional_array($records, 'first_name', 'Charlie')); // true
var_dump(multidimensional_array_key_exists($records, 'first_name')); // true