如何检查是否存在深层数组值

Chr*_*ess 16 php

我想快速识别数组中是否存在键,以避免抛出错误.

例如,我可能有这样的数组

$arr['f']['b']['g'] = array( 'a', 'b', 'c', ) ;
Run Code Online (Sandbox Code Playgroud)

或者数组在$ arr ['f'] ['b']中可能没有任何变量:

$arr['f']['x'] = array() ;
Run Code Online (Sandbox Code Playgroud)

当引用$ arr ['f'] ['b'] ['g']的(可能)内容时,如何避免在测试中重复?

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

必须有一种更简洁的方法来确定我所引用的给定数组值是否存在?看起来过于冗长,不得不测试我寻求的价值以及它的所有祖先的存在.在某些情况下,有道理,但不是全部.

例如:它可能代表用户 - >会话 - >购物车,我想要一种快速检查购物车是否有条目的方法,而不必每次都检查用户是否存在,然后是否存在会话,那么推车是否存在,那么......

编辑:我不是在寻找"键值名为'g'的数组值是否存在","是否存在具有f => b => g的祖先的数组值".

Jam*_*ton 29

以下将按预期工作:

if(isset($a['a']['b']['c']))
Run Code Online (Sandbox Code Playgroud)

如果未定义任何这些元素,isset()则返回false.

  • 只是为了澄清,这也安全地测试了`$ a`的存在:如果没有设置`$ a`,它返回false. (3认同)
  • 哇,多年来我一直确信这行不通。哈哈。 (3认同)