我想知道在数组密钥中检查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 ....
}
}
我是在考虑这个太难了还是什么?
编辑:这是我的审计数组的一个简洁示例...在循环开始时为所有这些数据分配零的可能性太多了。
答案 0 :(得分:2)
if (array_key_exists('price_changed', $audit)) {
.... do something ....
}
答案 1 :(得分:2)
使用empty()
功能。它将检查两个条件
false
或0
或empty 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