array_key_exists не работает - PullRequest
       17

array_key_exists не работает

8 голосов
/ 01 июня 2010

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

Ответы [ 3 ]

12 голосов
/ 01 июня 2010

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;
}
2 голосов
/ 01 июня 2010
$test_found = false;
array_walk_recursive($arr,
                     function($v, $k) use (&$test_found)
                     {
                         $test_found |= ($k == 'test');
                     });

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

2 голосов
/ 01 июня 2010

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;
}

возвращает false, если ключ не найден, или строку, содержащую "местоположение" ключа в этом массиве (например, 2:23:test), если он найден.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...