How to use ternary operator instead of if-else in PHP
-
01-10-2019 - |
Question
I’m trying to shorten my code using the ternary operator.
This is my original code:
if ($type = "recent") {
$OrderType = "sid DESC";
} elseif ($type = "pop") {
$OrderType = "counter DESC";
} else {
$OrderType = "RAND()";
}
How can I use the ternary operator in my code instead of if
s/else
s?
$OrderType = ($type = "recent") ? "sid DESC" : "counter DESC" ;
This is the code I tried, but have no idea how to add an “elseif
part” to it.
Solution
This is called the ternary operator ;-)
You could use two of those :
$OrderType = ($type == 'recent' ? 'sid DESC' : ($type == 'pop' ? 'counter DESC' : 'RAND()'))
This can be read as :
- if
$type
is'recent'
- then use
'sid DESC'
- else
- if
$type
is'pop'
- then use
'counter DESC'
- else use
'RAND()'
- if
A couple of notes :
- You must use
==
or===
; and not=
- The first two ones are comparison operators
- The last one is the assignment operator
- It's best to use
()
, to make things easier to read- And you shouldn't use too many ternary operators like that : it makes code a bit hard to understand, i think
And, as a reference about the ternary operator, quoting the Operators section of the PHP manual :
The third group is the ternary operator:
?:
.
It should be used to select between two expressions depending on a third one, rather than to select two sentences or paths of execution.
Surrounding ternary expressions with parentheses is a very good idea.
OTHER TIPS
I'd suggest using a case statement instead. it makes it a little more readable but more maintainable for when you want to add extra options
switch ($type)
{
case "recent":
$OrderType = "sid DESC";
break;
case "pop":
$OrderType = "counter DESC";
break;
default:
$OrderType = "RAND()";
}