Поэтому я не могу понять, почему приведенный ниже код работает так, как он работает.
<?php
$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, второе условие даже не должно обрабатываться, если первое является ложным (что, очевидно, имеет место в этом случае), однако, если мы удаляем вторую часть условия, оно работает как исключение - оно не возвращает никакого значения. Прямо сейчас, эта функция как-то возвращает значение.
Может кто-нибудь объяснить, как это работает?