问题
array_key_exists is not working for large multidimensional array. For ex
$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) returns \'false\' but it works with some simple arrays.
回答1:
array_key_exists does NOT work recursive (as Matti Virkkunen already pointed out). Have a look at the PHP manual, there is the following piece of code you can use to perform a recursive search:
<?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;
}
回答2:
array_key_exists doesn't work on multidimensionaml arrays. if you want to do so, you have to write your own function like this:
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;
}
this returns false
if the key isn't found or a string containing the "location" of the key in that array (like 2:23:test
) if it's found.
回答3:
$test_found = false;
array_walk_recursive($arr,
function($v, $k) use (&$test_found)
{
$test_found |= ($k == 'test');
});
This requires PHP 5.3 or later.
来源:https://stackoverflow.com/questions/2948948/array-key-exists-is-not-working