A: 

Set the variable to itself in the false case:

$variablename=($myarray["foo"]=="bar")? $myarray["foo"] : $variablename
Draemon
Why the downvot? this is perfectly valid
Draemon
dunno, I got one too for the same code.
jjnguy
Its not valid, there's a strong chance that will generate a notice.
Shadow
Yes it's valid, it just has a precondition. It makes no sense to conditionally set a variable if it may not have been set. If it hasn't been set, and you use the "if" method, you will just cause problems down the line - which is *worse* than a notice at the point of error.
Draemon
+6  A: 

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.

chaos
I think it's safer to always use braces.
Tom Haigh
Just wanted to point out, it is actually called the ternary operatorhttp://ca.php.net/ternary#language.operators.comparison.ternary
Evert
Pfaugh. Shows what Zend knows.
chaos
@Evert: not exactly. In the context of PHP, the terms `conditional operator` and `ternary operator` are completely interchangeable, because the conditional is the *only* ternary operator. So as a label on a manual page, it works. It doesn't mean, however, that it's "academically" correct. If PHP had a 2nd ternary operator we wouldn't be having this discussion.
Peter Bailey
+1  A: 

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"];
Chris Lively
A: 

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.

280Z28
+4  A: 

It doesn't get much shorter than:

if($condition) $var = $value;
gahooa
A: 

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.

Zenham
+1  A: 

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"];
Tom Haigh
+1  A: 

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)

wlashell