Как проверить, присутствует ли значение глубокого массива - PullRequest
15 голосов
/ 07 мая 2009

Я хочу быстро определить, присутствует ли ключ в массиве, чтобы избежать появления ошибки.

Например, у меня может быть такой массив

$arr['f']['b']['g'] = array( 'a', 'b', 'c', ) ;

Или в массиве вообще не может быть переменных в $ arr ['f'] ['b']:

$arr['f']['x'] = array() ;

Как можно избежать повторения в тесте при обращении к (возможно) содержимому $ arr ['f'] ['b'] ['g']?

if ( isset( $arr['f'] ) &&
     isset( $arr['f']['b'] ) &&
     isset( $arr['f']['b']['g'] ) /* ... yawn */ ) {
  /* blah */
}

Должен быть более краткий способ определить, существует ли данное значение массива, на которое я ссылаюсь? Это кажется слишком многословным, чтобы проверять наличие как ценности, которую я ищу, так и всей ее родословной. В некоторых обстоятельствах это имеет смысл, да, но не во всех.

Например: он может представлять, скажем, user-> session-> cart, где я хочу получить способ быстро проверить, есть ли в cart записи, без необходимости включать проверку каждого для пользователь существует, затем, существует ли сессия , затем существует cart , затем ...

Edit: я не ищу "существует ли значение массива с именем ключа 'g'", как "существует ли значение массива с наследством f => b => g"?

Ответы [ 2 ]

27 голосов
/ 07 мая 2009

Следующее будет работать так, как вы ожидаете:

if(isset($a['a']['b']['c']))

Если какой-либо из этих элементов не определен, isset() вернет false.

0 голосов
/ 07 мая 2009

В комментариях array_search есть код для многомерного поиска. Это может помочь.

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