php logical operator comparison evaluation -
here i'm trying achieve:
if $x either of these 3 values: 100, 200 or 300 - something
i'm doing this:
if($x==("100"||"200"||"300")) { //do } but //do something executed if $x 400
i noticed works:
if($x=="100"||$x=="200"||$x=="300") { //do } how first block of code different second block of code? doing wrong?
the reason why code isn't working because result of expression:
('100' || '200' || '300') is true because expression contains @ least 1 truthy value.
so, rhs of expression true, while lhs truthy value, therefore entire expression evaluates true. the reason why happening because of == operator, loose comparison. if used ===, resulting expression false. (unless of course value of $x false-y.)
let's analyze this:
assuming $x equal '400':
($x == ('100'||'200'||'300')) // ^ ^ // true true make sense now?
bottom line here is: this wrong way of comparing 3 values against common variable.
my suggestion use in_array:
if(in_array($x, array('100', '200', '300')) { //do something... }
Comments
Post a Comment