Ваша проблема связана с неправильным пониманием того, как вы отрицаете условные высказывания.
Вы упоминаете, что хотите повторить true
, если $line_2
содержит 0
ИЛИ 5
; однако ваш оператор if проверяет условие, противоположное эхо false
, и выдает эхо true
в случае сбоя условия. Поэтому нам нужно изменить условие с if line contains 0 or line contains 5
на if not (line contains 0 or line contains 5)
.
Способ, которым вы достигнете этого, заключается в рассмотрении законов де Моргана . В частности, когда вы распределяете отрицание по логическому ИЛИ или логическому И, выполняется следующее:
not (A OR B) = (not A) AND (not B)
not (A AND B) = (not A) OR (not B)
То есть вы распределяете отрицание и меняете логический оператор на его противоположность.
В этом случае, поскольку вы хотите выполнить not (line contains 0 or line contains 5)
, вы должны распределить его так, чтобы вы получили (not line contains 0) and (not line contains 5)
, который выглядит следующим образом:
$line_2 = '5%'; // this will be random. Can be 0%. Can be 5%. Can be 25%.
if (strpos($line_2, '5') === false && strpos($line_2, '0') === false) {
echo 'equals false';
} else {
echo 'equals true';
}
Проблема с вашим текущим кодом заключается в том, что вместо этого у вас есть решение, напоминающее if (not line contains 0) or (not line contains 5)
. Разница между ними заключается только в логическом операторе, соединяющем два условия, где вы используете or
, но на самом деле вы должны использовать and
.