所以我不明白为什么下面给出的代码不像它的工作原理。
$values = [
[
'key' => 'value',
'key2' => 'value2'
]
];
function filter($values, $flag = false) {
return array_filter(
$values,
function ($record) use ($flag) {
return $record['not_existing_key'] == 'not_existing_value'
&& $record['not_existing_key2'] == $flag ? '' : 'not_existing_value2';
}
);
}
print_r(filter($values));
字符串
上面代码的输出是:
Array
(
[0] => Array
(
[key] => value
[key2] => value
)
)
型
根据我对PHP中&&
操作符的理解,如果第一个条件为false,第二个条件甚至不应该被处理(在本例中显然是这样),但是如果我们删除条件的第二部分,它将作为except工作-它不返回任何值。
有人能解释一下它是如何工作的吗?
1条答案
按热度按时间blpfk2vs1#
你有一个operator precedence问题:
&&
和==
的优先级高于?:
,所以你的代码被解释为:字符串
由于第一个条件为假,因此其评估为
'not_existing_value2'
,在布尔上下文中被认为是true
。您需要添加括号以获得所需的计算顺序:
型
Demo on 3v4l.org的