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