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 ('тест', $arr) возвращает 'false', но он работает с некоторыми простыми массивами.
array_key_exists НЕ работает рекурсивно (как Matti Virkkunen уже указал). Посмотрите руководство по PHP, там есть следующий кусок кода, который вы можете использовать для выполнения рекурсивного поиска:
<?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;
}
$test_found = false;
array_walk_recursive($arr,
function($v, $k) use (&$test_found)
{
$test_found |= ($k == 'test');
});
Для этого требуется PHP 5.3 или новее.
array_key_exists не работает с многомерными массивами. если вы хотите сделать это, вы должны написать свою собственную функцию, например, такую:
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 возвращает false
, если ключ не найден, или строку, содержащую "местоположение" ключа в этом массиве (например, 2:23:test
), если он найден.