Tutorial :Conditional operator with only true statement



Question:

I want to set a variable to a value, but only if a condition is true.
Instead of doing the following:

if($myarray["foo"]==$bar){        $variablename=$myarray["foo"];    }    

This can end up being quite long if the variable names are long, or perhaps it involves arrays, when it's quite simple what I want to do â€" set a value if a condition is true.

I would like to use the conditional operator, something like this:

$variablename=($myarray["foo"]=="bar")? $myarray["foo"]......  

But this fails because I don't want the variable to be set at all if the statement is false.

Basically, what I'm trying to do is make the first example shorter. Perhaps the conditional operator is not the way though...

Does anyone have any suggestions?


Solution:1

It doesn't get much shorter than:

if($condition) $var = $value;  


Solution:2

IMO, the best way to make your code sample shorter is:

if($myarray["foo"] == $bar)      $variablename = $myarray["foo"];  

FYI, the name of the operator you're asking about isn't "the ternary operator", it's the conditional operator.

Since you ask, a way you could actually use the conditional operator to do what you're asking is:

$myarray['foo'] == $bar ? $variablename = $myarray['foo'] : null;  

but that's somewhat horrifically ugly and very unmaintainable.


Solution:3

You could do this, but I wouldn't as it is pretty unreadable and stupid:

$myarray["foo"] == $bar ? $variablename = $myarray["foo"] : 0;  

or

$myarray["foo"] == $bar && $variablename = $myarray["foo"];  


Solution:4

The "problem" you have isn't really a problem. Your example code is very clear and maintainable. I would really say leave it like it is.

You -could- remove the braces, but that will have an impact on maintainability.

Your other alternative is to create a set_if_true(mixed array, string key, boolean conditional) wrapper function. It hides what is really happening but depending on your specific implementation it is a good option. (For instance a configuration type object, or caching backend)


Solution:5

Your right, ternary is not the way to go. It's there to handle the if and else part of the statement.

Just stick with the regular if statement.

if($myarray["foo"]==$bar) $variablename=$myarray["foo"];  


Solution:6

You can put the original expression in the else part of the ternary operation, but if you want to guarantee single evaluation of the expression then you'll have to use a temporary variable and an if statement.


Solution:7

Ternary isn't the way, even though it can be written so that ternary works.

The reason is this: you're trying to use it in a way it's not intended, which will make your code awkward for other developers to read.


Solution:8

Put != instead of == and ?: instead of just ?..

$variablename = ($myarray["foo"] != "bar") ?: $myarray["foo"];  

is the same as

if($myarray["foo"] != "bar"){} else { $variablename = $myarray["foo"]; }  

It might not be the smartest solution but it works. I like this one more

if($myarray["foo"] != "bar") {$variablename = $myarray["foo"]};  


Solution:9

Set the variable to itself in the false case:

$variablename=($myarray["foo"]=="bar")? $myarray["foo"] : $variablename  

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »