Я знаю, что этот код будет работать:
echo ( $a == $b || $a == $c ) ? "Yes" : "No";
Это можно прочитать как:
если $ a равно $ b или $ a равно $ c
Есть ли способ сделать его более коротким, как:
если $ a равен $ b или $ c
Я много пробовал, в том числе и это, но все еще не повезло:
echo ( $a == ( $b xor $c ) ) ? "Yes" : "No";
Ты можешь использовать in_array
:
var_dump(in_array($a, [$b, $c]));
с вашим примером:
echo in_array($a, [$b, $c]) ? 'Yes' : 'No';
Примечание: этот синтаксис полезен, только если у вас есть более 2 значений. Для немногих ценностей $a == $b || $a == $c
делает работу хорошо и, вероятно, быстрее.
Это две альтернативы, но обе они будут выполняться дольше, чем код, который вы опубликовали, потому что они полагаются на более сложные функции.
preg_match('/^('.$b.'|'.$c.')$/',$a) === 0
in_array($a,array($b,$c)) === true
Если вы ставите условие с большей вероятностью как истинное в качестве первого выражения, в большинстве случаев PHP будет оценивать выражение как истинное и не проверять второе выражение.