PHP 7.0.6 Released

if

(PHP 4, PHP 5, PHP 7)

The if construct is one of the most important features of many languages, PHP included. It allows for conditional execution of code fragments. PHP features an if structure that is similar to that of C:

if (expr)
  statement

As described in the section about expressions, expression is evaluated to its Boolean value. If expression evaluates to TRUE, PHP will execute statement, and if it evaluates to FALSE - it'll ignore it. More information about what values evaluate to FALSE can be found in the 'Converting to boolean' section.

The following example would display a is bigger than b if $a is bigger than $b:

<?php
if ($a $b)
  echo 
"a is bigger than b";
?>

Often you'd want to have more than one statement to be executed conditionally. Of course, there's no need to wrap each statement with an if clause. Instead, you can group several statements into a statement group. For example, this code would display a is bigger than b if $a is bigger than $b, and would then assign the value of $a into $b:

<?php
if ($a $b) {
  echo 
"a is bigger than b";
  
$b $a;
}
?>

If statements can be nested infinitely within other if statements, which provides you with complete flexibility for conditional execution of the various parts of your program.

User Contributed Notes

robk
2 years ago
easy way to execute conditional html / javascript / css / other language code with php if else:

<?php if (condition): ?>

html code to run if condition is true

<?php else: ?>

html code to run if condition is false

<?php endif ?>
Christian L.
5 years ago
An other way for controls is the ternary operator (see Comparison Operators) that can be used as follows:

<?php
$v
= 1;

$r = (1 == $v) ? 'Yes' : 'No'; // $r is set to 'Yes'
$r = (3 == $v) ? 'Yes' : 'No'; // $r is set to 'No'

echo (1 == $v) ? 'Yes' : 'No'; // 'Yes' will be printed

// and since PHP 5.3
$v = 'My Value';
$r = ($v) ?: 'No Value'; // $r is set to 'My Value' because $v is evaluated to TRUE

$v = '';
echo (
$v) ?: 'No Value'; // 'No Value' will be printed because $v is evaluated to FALSE
?>

Parentheses can be left out in all examples above.
brian at webdesignacademy.co.za
10 months ago
You can also check alphabet characters like this

<?php
// Alphabetical Comparison
 
$a="brian";
 
$b="zebra";
      if (
$a < $b){
        echo
$a." is before ".$b." in the alphabet";
      }
      else{
          echo
$a." is after ".$b." in the alphabet";
      }
// Result : brian is before zebra in the alphabet
?>
boi at mas-mas dot it
4 days ago
you can use 'true/false/null' if you don't have an 'else' condition. it fit with 'for' statement.

eg.
for ($x=0; $x<10; $x++,($x==3) ? die("it's 3!") : false);
Donny Nyamweya
5 years ago
In addition to the traditional syntax for if (condition) action;
I am fond of the ternary operator that does the same thing, but with fewer words and code to type:

(condition ? action_if_true: action_if_false;)

example

(x > y? 'Passed the test' : 'Failed the test')
chrislabricole at yahoo dot fr
7 years ago
You can do IF with this pattern :
<?php
$var
= TRUE;
echo
$var==TRUE ? 'TRUE' : 'FALSE'; // get TRUE
echo $var==FALSE ? 'TRUE' : 'FALSE'; // get FALSE
?>
john
7 years ago
@henryk (and everybody):

You should put your arguments in order by *least* likely to be true. That way if php is going to be able to quit checking, it will happen sooner rather than later, and your script will run (what amounts to unnoticeably) faster.

At least, that makes the most sense to me, but I don't claim omniscience.
austinderrick2 at gmail dot com
6 years ago
As an added note to the guy below, in such a case, use the !== operator like this.

$nkey = array_search($needle, $haystack);

if ($nkey !== false) { ...

The !== and the === compare the "types". So, with this type of comparision, 0 is not the same as the FALSE returned by the array_search array when it can not find a match. :)

Quoted Text:

===================================
Be careful with stuff like

if ($nkey = array_search($needle, $haystack)) { ...

if the returned key is actually the key 0, then the if won't be executed
===================================
grawity at gmail dot com
8 years ago
re: #80305

Again useful for newbies:

if you need to compare a variable with a value, instead of doing

<?php
if ($foo == 3) bar();
?>

do

<?php
if (3 == $foo) bar();
?>

this way, if you forget a =, it will become

<?php
if (3 = $foo) bar();
?>

and PHP will report an error.
synnus at gmail dot com
1 year ago
you want créate IF in for with multi var :

(#) ? A : B; or ((#) ? A : B);
but is possibli this
((#) ? A.B.C.D : E.F.G.H);
exemple

(( $A>=$B ) ? ($A++) . ($B--)  :  ($A--) . ($B++) );
echo $A, PHP_EOL;
echo $B, PHP_EOL;

exemple :
<?php

For( $A=0 , $B=10 , $C=50 $A<=$C  $A++,  (( $A>=$B ) ? ($A++) . ($B--)  :  ($A--) . ($B++) ) )  {
echo
$A, PHP_EOL;
echo
$B, PHP_EOL;
echo
$C, PHP_EOL;
}

?>
techguy14 at gmail dot com
5 years ago
You can have 'nested' if statements withing a single if statement, using additional parenthesis.
For example, instead of having:

<?php
if( $a == 1 || $a == 2 ) {
    if(
$b == 3 || $b == 4 ) {
        if(
$c == 5 || $ d == 6 ) {
            
//Do something here.
       
}
    }
}
?>

You could just simply do this:

<?php
if( ($a==1 || $a==2) && ($b==3 || $b==4) && ($c==5 || $c==6) ) {
   
//do that something here.
}
?>

Hope this helps!
Anonymous
7 years ago
If you need to do something when a function return FALSE and nothing when it return TRUE you can do it like that :
<?php
function call()
{
return
FALSE;
}

if(
call()==TRUE) // or if(call())
{
// nothing to do
}
else
{
// do something here
}
?>

You can also write it like this :
<?php
if(!call()==TRUE) // or if(!call())
{
// do something here
}
// here '!' will invert 'FALSE' (from call()) into 'TRUE'
?>
/!\ WARNING /!\
The '!' only work with booleans !
Check http://fr.php.net/manual/en/language.types.boolean.php to know if you can use '!'

If you want to compare two strings and use '!' be careful how you use it !!!!
<?php
$string1
= "cake";
$string2 = "foo";

if(!
$string1==$string2)
{
echo
"cake is a lie";
}
//this will ALWAYS fail without exception because '!' is applied to $string1 and not to '$string1==$string2'

//to work, you have to do like this
if(!($string1==$string2))
{
echo
"cake is a lie";
}
//it will display 'cake is a lie' because ($string1==$string2) return FALSE and '!' will invert it into TRUE
?>
For array/float, it's the same !
ehsan at chavoshi dot com
4 years ago
You can use a simple if and echo structure :

$i==1 and print "i is 1"
is identical with
if ($i ==1)
  echo "i is 1";
betty soappiece
3 months ago
$det = $b*$b-4*$a*$c;

        if ($det <0)
        {
            echo "bubb $a&sdot;x² + $b&sdot;x + $c  = 0 does not have an answer.";
        }
        elseif ($det ==0)
        {
            $loesung = round(-$b/(2*$a),2);
            echo "blubb  $a&sdot;x² + $b&sdot;x + $c  = 0 does not have an answer.";
        }
        elseif ($det > 0)
        {
            $loesung1 = round((-$b+sqrt($det))/(2*$a),2);
            $loesung2 = round((-$b-sqrt($det))/(2*$a),2);
            echo "blubb $a&sdot;x² + $b&sdot;x + $c  = 0 does have an answer $loesung1 and $loesung2.";
        }
sofwan at sofwan dot net
4 years ago
It seems that only numbers can be compared between them but actually an alphabet can be compare too. For example :

<?php
// Number comparison
 
$a="C";
 
$b="X";
  if (
$a<$b)
     {
    echo
$a."is smaller than".$b;
    }               
// Result : C is smaller than X
?>
strata_ranger at hotmail dot com
7 years ago
Although most programmers are aware of this already, if for whatever reason you need to 'break' out of an if() block (which, unlike switch() is not considered a looping structure) just wrap it in an appropriate looping structure, such as a do-while(false):

<?php
do if ($foo)
{
 
// Do something first...

  // Shall we continue with this block, or exit now?
 
if ($abort_if_block) break;

 
// Continue doing something...

} while (false);
?>
admin at leonard !spam challis dot com
5 years ago
When using if statements without the curly braces, remember than only one statement will be executed as part of that condition. If you want to place multiple statements you must use curly braces, and not just put them on the same line.

<?php

if (1==0) echo "Test 1."; echo "Test 2";

?>

Whereas some people would expect nothing to be displayed, this piece of code will show: "Test 2".
contact at bsorin dot romania
7 years ago
This has got the better part of my last 2 hours, so I'm putting it here, maybe it will save someone some time.

I had a

if (function1() && function2())

statement. Before returning true or false, function1() and function2() had to output some text. The trick is that, if function1() returns false, function2() is not called at all. It seems I should have known that, but it slipped my mind.
Anonymous
7 years ago
Re : henryk dot kwak at gmail dot com
<?php function message($m)
{
echo
"$m <br />\r";
return
true;
}
$k=false;
if (
message("first")&& $k && message("second")){;}
// will show
//first
class
$k=true;
if (
message("first")&& $k && message("second")){;}
// will show
//first
//second 
?>
redrobinuk at aol dot com
8 years ago
This is aimed at PHP beginners but many of us do this  Ocasionally...

When writing an if statement that compares two values, remember not to use a single = statement.

eg:
<?php
if ($a = $b)
     {
         print(
"something");
     }
?>
This will assign $a the value $b and output the statement.

To see if $a is exactly equal to $b (value not type) It should be:
<?php
    
if ($a == $b)
     {
         print(
"something");
     }
?>
Simple stuff but it can cause havok deep in classes/functions etc...
marki at trash-mail dot com
1 month ago
Why can't we quit an if block?

What's funny is that PHP has "goto", allows to include() stuff (from which you can "return"), etc.etc., but you can't just quit an if-block but must resort to hacks like

<?php
if($bla) { do{
 
$bla = get_bla();
  if(empty(
$bla)) break;
  ...
} while(
false); }
?>
pouyapanahzadeh at gmail dot com
11 months ago
<div id="carousel-example-generic" class="carousel slide" data-ride="carousel">

  <div class="carousel-inner" role="listbox">
<?php
$i
= 0;
            while((
$row = mysql_fetch_array($query2))) {
            if (
$i == 0 ) { ?>
   <div class="item active">
      <img src="images/<?php echo $row['image'] ?>" alt="<?php echo $row['title'] ?>">
    </div>
     <?php
     $i
++ ;
     }
else {
?>
<div class="item">
      <img src="images/<?php echo $row['image'] ?>" alt="<?php echo $row['title'] ?>">
    </div>
    <?php } ?>
    <?php } ?>
  </div>
  </div>
Aldee Mativo
2 years ago
If you intend only a single line (one-way) conditional script, you can do the following:

empty($user) || $user->save();

if $user variable is empty, it will not execute $user->save(). Otherwise it will perform saving operation. In other words/form of expression, it can be expressed like this:

if(!empty($user))
    $user->save();
andrea
1 month ago
'NN' is false!
<?php if(0=='NN') echo "nn"; ?>
Rudi
5 years ago
Note that safe type checking (using === and !== instead of == and !=) is in general somewhat faster. When you're using non-safe type checking and a conversion is really needed for checking, safe type checking is considerably faster.

===================================
Test (100,000,000 runs):
<?php
$start
= microtime(true);
for(
$i = 0; $i < 100000000; $i++)
    if(
5 == 10) {}
$end = microtime(true);
echo
"1: ".($end - $start)."<br />\n";
unset(
$start, $end);

$start = microtime(true);
for(
$i = 0; $i < 100000000; $i++)
    if(
'foobar' == 10) {}
$end = microtime(true);
echo
"2: ".($end - $start)."<br />\n";
unset(
$start, $end);

$start = microtime(true);
for(
$i = 0; $i < 100000000; $i++)
    if(
5 === 10) {}
$end = microtime(true);
echo
"3: ".($end - $start)."<br />\n";
unset(
$start, $end);

$start = microtime(true);
for(
$i = 0; $i < 100000000; $i++)
    if(
'foobar' === 10) {}
$end = microtime(true);
echo
"4: ".($end - $start)."<br />\n";
unset(
$start, $end);
?>

===================================
Result (depending on hardware configuration):
1: 16.779544115067
2: 21.305675029755
3: 16.345532178879
4: 15.991420030594
ronson at web dot com
3 months ago
$det = $b*$b-4*$a*$c;

        if ($det <0)
        {
            echo "Die Gleichung $a&sdot;x² + $b&sdot;x + $c  = 0 hat keine Lösung.";
        }
        elseif ($det ==0)
        {
            $loesung = round(-$b/(2*$a),2);
            echo "Die Gleichung $a&sdot;x² + $b&sdot;x + $c  = 0 hat die Lösung $loesung.";
        }
        elseif ($det > 0)
        {
            $loesung1 = round((-$b+sqrt($det))/(2*$a),2);
            $loesung2 = round((-$b-sqrt($det))/(2*$a),2);
            echo "Die Gleichung $a&sdot;x² + $b&sdot;x + $c  = 0 hat die Lösungen $loesung1 und $loesung2.";
        }
To Top