Which is better

Which would be considered the better/faster running/proper way of doing this?

<?php

if($a == 4 && $b == 8)
{
	$c = "car";
}
if($a == 5 && $b == 3)
{
	$c = "car";
}
if($a == 5 && $b == 2)
{
	$c = "car"; 
}

?>

OR

<?php

if($a == 4 && $b == 8 || $a == 5 && $b == 3 || $a == 5 && $b == 2)
{
	$c = "car";
}

?>

I don’t have benchmark of it… but for more human readable way could be something like this (or say I would do in this way):


if(in_array($a, array(4,5)) && in_array($b, array(8,3,2))){
	echo "Car";
}

Be verrrrry careful with that joined one, scout1idf.

if($a == 4 && $b == 8)
if($a == 5 && $b == 3)
if($a == 5 && $b == 2)

if($a == 4 && $b == 8 || $a == 5 && $b == 3 || $a == 5 && $b == 2)

these two statements may not be equivalent.

if(($a == 4 && $b == 8) || ($a == 5 && $b == 3) || ($a == 5 && $b == 2))

WOULD be equivalent.

Raju: While streamlined, your code does not give the desired result (a = 4, b = 2 is ‘false’ (not ‘car’) in his logic, but the in_array tests would return true.

What you could do to use in_array is define it as:


$valid = array("4,8","5,3","5,2");
if(in_array($a.",".$b,$valid) {
  echo "Car";
}

It’s hard without knowing context, but from a readability POV…


<?php
$isFourAndEight = $a == 4 && $b == 8;
$isFiveAndThree = $a == 5 && $b == 3;
$isNineAndSeven = $a == 9 && $b == 7;

if($isFourAndEight || $isFiveAndThree || $isNineAndSeven){
  $c = 'car';
}

Yes they are, && has a higher precedence than ||, so internally


if($a == 4 && $b == 8 || $a == 5 && $b == 3 || $a == 5 && $b == 2)

will be executed as if it were


if(($a == 4 && $b == 8) || ($a == 5 && $b == 3) || ($a == 5 && $b == 2))

As for the original question, you could also use:


if($a == 4 && $b == 8) 
{ 
    $c = "car"; 
} 
else if($a == 5 && $b == 3) 
{ 
    $c = "car"; 
} 
else if($a == 5 && $b == 2) 
{ 
    $c = "car";  
} 

which is faster than the if (a) if (b) if (c) but just as fast as the (a || b || c)
(brownie points to anyone who can tell why)

Well okay, in this example they are, Scallio, the point was more to the intimation that if(A), if(B) == if(A || B) may not be true, and it’s better practice to say if((A)||(B)).

Yeah you’re right about that. It’s just that I kinda dislike parentheses so I tend to avoid them if at all possible :slight_smile:
(okay I dislike everything that is more verbose than need be)

Thanks for the info everyone.

I got side tracked by a virus so I didn’t have time to respond.