PHP检查数组值是否为

时间:2016-08-17 19:42:29

标签: php arrays

我想知道在数组密钥中检查true的适当方法是什么,而不抛出PHP通知,如果它不存在?

我的脚本在每个循环中遍历几个if语句,并且随着它的进行,它在名为" audit"的数组中创建键。

因此,对于循环的一次迭代,数组可能如下所示:

$audit = 
  Array
  (
    'price_changed' => 1,
    'price_changed_to' => 10,
    'quantity_changed' => 1,
    'quantity_changed_to' => 6
  )

接下来,它可能如下所示:

$audit = 
  Array
  (
    'quantity_changed' => 1,
    'quantity_changed_to' => 4,
    'description_changed' => 1,
    'description_changed_to' => 'Test product'
  )

现在我希望能够做到这样的事情:

if($audit['price_changed']){
   .... do something ....
}

然而,对于for中的第二项,该键不存在,并且我的调试日志填满了PHP通知。

我确定我可以在下面做这样的事情,但似乎我不应该为这样简单的东西输入那么多东西。

if(isset($audit['price_changed'])) {
   if($audit['price_changed']) {
     .... do something ....
   }
 }

我是在考虑这个太难了还是什么?

编辑:这是我的审计数组的一个简洁示例...在循环开始时为所有这些数据分配零的可能性太多了。

4 个答案:

答案 0 :(得分:2)

You can use array_key_exists

if (array_key_exists('price_changed', $audit)) {
 .... do something ....
}

答案 1 :(得分:2)

使用empty()功能。它将检查两个条件

  • 您的密钥存在于数组
  • 密钥的值不是false0empty string

示例:

if (!empty($audit['price_changed'])) {
    // do something
}

答案 2 :(得分:0)

如果您可以简单地执行以下操作,而不是使用嵌套:

if(isset($audit['price_changed']) && $audit['price_changed']) {
   // do something ...
}

答案 3 :(得分:0)

对于PHP7,您可以使用空合并运算符??

if ($value['price_changed'] ?? false)

如果没有设置price_change,??将返回第二个arg,导致if失败,因为表达式将评估为false:

php > $foo = array('t' => true, 'f' => false);
php > if ($foo['t'] ?? false) { echo 'true'; } else { echo 'false'; }
true
php > if ($foo['f'] ?? false) { echo 'true'; } else { echo 'false'; }
false
php > if ($foo['file_not_found'] ?? false) { echo 'true'; } else { echo 'false'; }
false