isset,array_key_exists和!empty的解决方法

Tom*_*Tom 6 php arrays

在编写php时,我尽量避免使用尽可能多的警告.关于数组,有一个问题让我困扰了很长一段时间.

在处理数组及其值时,我经常在进入"实际工作"之前检查空值.

if(array_key_exists('bla', $array){
  if( !empty($array['bla']) {
    # do something
  }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

这是很多代码,只是检查我是否有值可以使用.是否有一些更短的方法来检查数组中可能存在或不存在的值?

Lig*_*ica 6

empty除非你确定这是你想要的,否则不要使用:

FALSE如果var存在则返回并且具有非空的非零值.否则返回TRUE.

以下内容被认为是空的:

  • "" (一个空字符串)
  • 0 (0作为整数)
  • 0.0 (0作为浮点数)
  • "0" (0作为字符串)
  • NULL
  • FALSE
  • array() (一个空数组)
  • $var; (声明的变量,但没有值)

该手册没有明确列出"如果var 存在"的情况,但这里有一对:

  • $array['undeclaredKey'] (现有数组,但未声明键)
  • $undeclaredVar; (未声明的变量)

通常array_key_exists检查应该足够了.


Phi*_*l M 6

如果您要检查非空值,那么您可以使用!empty($array['bla']).

您还可以使用isset($array['bla']),它false会在以下情况下返回:1) 未定义键或 2) 如果为键存储的值为null。检查数组是否包含键(即使其值为空)的唯一万无一失的方法是使用array_key_exists().

empty()即使密钥存在(行为类似于),对 的调用也是安全的isset(),因此您不必通过 来保护它array_key_exists()

我很惊讶这一点没有被提及,但在不生成警告/错误的情况下获取键值的最短方法是使用错误控制运算符

// safely fetch from array, will return NULL when key doesn't exist
$value = @$array['bla'];
Run Code Online (Sandbox Code Playgroud)

这允许您获取任何键的值,并且null如果该键不存在则可能返回该值。


web*_*ave 2

做就是了:

if (!empty($array['bla'])) {
Run Code Online (Sandbox Code Playgroud)

如果密钥不存在,则不会有警告。