我使用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()当涉及到多维数组?
In_array()在多维数组上不起作用。你可以写一个递归函数来做这件事:
function in_array_r($needle, $haystack, $strict = false) {
foreach ($haystack as $item) {
if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) {
return true;
}
}
return false;
}
用法:
$b = array(array("Mac", "NT"), array("Irix", "Linux"));
echo in_array_r("Irix", $b) ? 'found' : 'not found';
如果你知道要搜索哪一列,你可以使用array_search()和array_column():
$userdb = Array
(
(0) => Array
(
('uid') => '100',
('name') => 'Sandra Shush',
('url') => 'urlof100'
),
(1) => Array
(
('uid') => '5465',
('name') => 'Stefanie Mcmohn',
('url') => 'urlof5465'
),
(2) => Array
(
('uid') => '40489',
('name') => 'Michael',
('url') => 'urlof40489'
)
);
if(array_search('urlof5465', array_column($userdb, 'url')) !== false) {
echo 'value is in multidim array';
}
else {
echo 'value is not in multidim array';
}
这个想法在PHP手册中array_search()的评论部分;
许多这样的搜索通常是为了在记录列表中查找内容,正如一些人指出的那样,这实际上是一个二维数组。
这适用于具有统一键集的记录列表),例如从数据库中获取的记录列表。
为了完整起见,这个结构包含了'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