Based on the examples from this page, I have the working and non-working code samples below.
Working code using if
statement:
if (!empty($address['street2'])) echo $address['street2'].'<br />';
Non-working code using ternary operator:
$test = (empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
// Also tested this
(empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
UPDATE
After Brian's tip, I found that echoing $test
outputs the expected result. The following works like a charm!
echo (empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />';
This question is related to
php
ternary-operator
conditional-operator
Quick and short way:
echo $address['street2'] ? : "No";
Here are some interesting examples, with one or more varied conditions.
$color = "blue";
// Condition #1 Show color without specifying variable
echo $color ? : "Undefined";
echo "<br>";
// Condition #2
echo $color ? $color : "Undefined";
echo "<br>";
// Condition #3
echo ($color) ? $color : "Undefined";
echo "<br>";
// Condition #4
echo ($color == "blue") ? $color : "Undefined";
echo "<br>";
// Condition #5
echo ($color == "" ? $color : ($color == "blue" ? $color : "Undefined"));
echo "<br>";
// Condition #6
echo ($color == "blue" ? $color : ($color == "" ? $color : ($color == "" ? $color : "Undefined")));
echo "<br>";
// Condition #7
echo ($color != "") ? ($color != "" ? ($color == "blue" ? $color : "Undefined") : "Undefined") : "Undefined";
echo "<br>";
It's the Ternary operator a.k.a Elvis operator (google it :P) you are looking for.
echo $address['street2'] ?: 'Empty';
It returns the value of the variable or default if the variable is empty.
The ternary operator is just a shorthand for and if/else block. Your working code does not have an else condition, so is not suitable for this.
The following example will work:
echo empty($address['street2']) ? 'empty' : 'not empty';
I think you used the brackets the wrong way. Try this:
$test = (empty($address['street2']) ? 'Yes <br />' : 'No <br />');
I think it should work, you can also use:
echo (empty($address['street2']) ? 'Yes <br />' : 'No <br />');
I dont think i found the answer in all the above solutions.
Some are also wrong.
To tests if a variable (or an element of an array, or a property of an object) exists (and is not null) use:
echo isset($address['street2']) ? $address['street2'] : 'Empty';
To tests if a variable (...) contains some non-empty data use:
echo !empty($address['street2']) ? $address['street2'] : 'Empty';
Note that when using nested conditional operators, you may want to use parenthesis to avoid possible issues!
It looks like PHP doesn't work the same way as at least Javascript or C#.
$score = 15;
$age = 5;
// The following will return "Exceptional"
echo 'Your score is: ' . ($score > 10 ? ($age > 10 ? 'Average' : 'Exceptional') : ($age > 10 ? 'Horrible' : 'Average'));
// The following will return "Horrible"
echo 'Your score is: ' . ($score > 10 ? $age > 10 ? 'Average' : 'Exceptional' : $age > 10 ? 'Horrible' : 'Average');
The same code in Javascript and C# return "Exceptional" in both cases.
In the 2nd case, what PHP does is (or at least that's what I understand):
$score > 10
? yes$age > 10
? no, so the current $age > 10 ? 'Average' : 'Exceptional'
returns 'Exceptional''Exceptional' ? 'Horrible' : 'Average'
which returns 'Horrible', as 'Exceptional' is truthyFrom the documentation: http://php.net/manual/en/language.operators.comparison.php
It is recommended that you avoid "stacking" ternary expressions. PHP's behaviour when using more than one ternary operator within a single statement is non-obvious.
There's also a shorthand ternary operator and it looks like this:
(expression1) ?: expression2 will return expression1 if it evaluates to true or expression2 otherwise.
Example:
$a = 'Apples';
echo ($a ?: 'Oranges') . ' are great!';
will return
Apples are great!
Since PHP 5.3, it is possible to leave out the middle part of the ternary operator. Expression expr1 ?: expr3 returns expr1 if expr1 evaluates to TRUE, and expr3 otherwise.
From the PHP Manual
Basic True / False Declaration
$is_admin = ($user['permissions'] == 'admin' ? true : false);
Conditional Welcome Message
echo 'Welcome '.($user['is_logged_in'] ? $user['first_name'] : 'Guest').'!';
Conditional Items Message
echo 'Your cart contains '.$num_items.' item'.($num_items != 1 ? 's' : '').'.';
I think you probably should not use ternary operator in php. Consider next example:
<?php
function f1($n) {
var_dump("first funct");
return $n == 1;
}
function f2($n) {
var_dump("second funct");
return $n == 2;
}
$foo = 1;
$a = (f1($foo)) ? "uno" : (f2($foo)) ? "dos" : "tres";
print($a);
How do you think, what $a
variable will contain? (hint: dos)
And it will remain the same even if $foo
variable will be assigned to 2.
To make things better you should either refuse to using this operator or surround right part with braces in the following way:
$a = (f1($foo)) ? "uno" : ((f2($foo)) ? "dos" : "tres");
You can do this even shorter by replacing echo
with <?= code ?>
<?=(empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />'?>
This is useful especially when you want to determine, inside a navbar, whether the menu option should be displayed as already visited (clicked) or not:
<li<?=($basename=='index.php' ? ' class="active"' : '')?>><a href="index.php">Home</a></li>
Conditional Welcome Message
echo 'Welcome '.($user['is_logged_in'] ? $user['first_name'] : 'Guest').'!';
Nested PHP Shorthand
echo 'Your score is: '.($score > 10 ? ($age > 10 ? 'Average' : 'Exceptional') : ($age > 10 ? 'Horrible' : 'Average') );
Ternary Operator is basically shorthand for if/else statement. We can use to reduce few lines of code and increases readability.
Your code looks cleaner to me. But we can add more cleaner way as follows-
$test = (empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
Another way-
$test = ((empty($address['street2'])) ? 'Yes <br />' : 'No <br />');
Note- I have added bracket to whole expression to make it cleaner. I used to do this usually to increase readability. With PHP7 we can use Null Coalescing Operator / php 7 ?? operator for better approach. But your requirement it does not fit.
As of PHP 7, this task can be performed simply by using the Null coalescing operator like this :
echo !empty($address['street2']) ?? 'Empty';
If first variable($a
) is null
, then assign value of second variable($b
) to first variable($a
)
$a = 5;
$b = 10;
$a != ''?$a: $a = $b;
echo $a;
Source: Stackoverflow.com