array_key_exists не работает

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', но он работает с некоторыми простыми массивами.

8
задан klipach 9 October 2014 в 10:20
поделиться

3 ответа

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;
}
12
ответ дан 5 December 2019 в 10:39
поделиться
$test_found = false;
array_walk_recursive($arr,
                     function($v, $k) use (&$test_found)
                     {
                         $test_found |= ($k == 'test');
                     });

Для этого требуется PHP 5.3 или новее.

2
ответ дан 5 December 2019 в 10:39
поделиться

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), если он найден.

2
ответ дан 5 December 2019 в 10:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: