array_key_exists不适用于大型多维数组。对于前
$arr = array(
'1' => 10,
'2' => array(
'21' => 21,
'22' => 22,
'23' => array(
'test' => 100,
'231' => 231
),
),
'3' => 30,
'4' => 40
);
array_key_exists('test',$ arr)返回'false'但它适用于一些简单的数组。
答案 0 :(得分:12)
array_key_exists不起作用递归(已经指出Matti Virkkunen)。看一下PHP手册,您可以使用以下piece of code来执行递归搜索:
<?php
function array_key_exists_r($needle, $haystack)
{
$result = array_key_exists($needle, $haystack);
if ($result) return $result;
foreach ($haystack as $v) {
if (is_array($v)) {
$result = array_key_exists_r($needle, $v);
}
if ($result) return $result;
}
return $result;
}
答案 1 :(得分:2)
array_key_exists不适用于multidimensionaml数组。如果你想这样做,你必须编写自己的函数:
function array_key_exists_multi($n, $arr) {
foreach ($arr as $key=>$val) {
if ($n===$key) {
return $key;
}
if (is_array($val)) {
if(multi_array_key_exists($n, $val)) {
return $key . ":" . array_key_exists_multi($n, $val);
}
}
}
return false;
}
如果找不到密钥则返回false
,或者如果找到该字符串,则返回包含该数组中密钥“location”的字符串(如2:23:test
)。
答案 2 :(得分:2)
$test_found = false;
array_walk_recursive($arr,
function($v, $k) use (&$test_found)
{
$test_found |= ($k == 'test');
});
这需要PHP 5.3或更高版本。
答案 3 :(得分:0)
这是另一种,适用于任何维度数组
return current != NULL;