2010-08-17 16 views
47

Ich vermute, es ist nicht zulässig, weil ich bekomme "Parse Fehler: Syntaxfehler, unerwartete T_IF in ..." Fehler. Aber ich konnte keinen Weg finden, mein Ziel zu erreichen. Hier ist mein Code:Wenn Block innerhalb Echo-Anweisung?

<?php 

    $countries = $myaddress->get_countries(); 

    foreach($countries as $value){ 
    echo '<option value="'.$value.'"'.if($value=='United States') echo 'selected="selected"';.'>'.$value.'</option>'; 
    } 
    ?> 

Was es tut, ist es zeigt eine Liste der Länder in einem ausgewählten Element und setzt USA als Standard. Ich nicht traurig arbeiten ...

Antwort

117

Sie wollen die einen ternary Operator verwenden, die als wirkt verkürzt IF/Else-Anweisung:

echo '<option value="'.$value.'" '.(($value=='United States')?'selected="selected"':"").'>'.$value.'</option>'; 
+0

+1. --- prüg mich dazu. – sberry

+2

Hier ist der ternäre Operator nützlich. Das war schnell, vielen Dank! – Joann

+0

Es ist nicht "meine Vorliebe" in Situationen wie diesem. Ich mag den ternären Operator für das Setzen/Setzen von Variablen. Aber das ist, was Sie gefragt haben, gibt es, wie Sie es tun :) –

8

Verwenden Sie ein ternary operator:

echo '<option value="'.$value.'"'.($value=='United States' ? 'selected="selected"' : '').'>'.$value.'</option>'; 

Und während Sie dabei sind, könnten Sie printf verwenden, um Ihren Code lesbarer/handlicher zu machen:

printf('<option value="%s" %s>%s</option>', 
    $value, 
    $value == 'United States' ? 'selected="selected"' : '' 
    $value); 
8

Sie können immer die (<condition> ? <value if true> : <value if false>) Syntax verwenden (sie nennt sich ternary operator - dank Mark, um mich zu erinnern :)). Wenn <condition> wahr ist, wird die Anweisung als <value if true> ausgewertet. Wenn nicht, würde es als <value if false>

Zum Beispiel bewertet werden:

$fourteen = 14; 
$twelve = 12; 
echo "Fourteen is ".($fourteen > $twelve ? "more than" : "not more than")." twelve"; 

Dies ist das gleiche wie:

$fourteen = 14; 
$twelve = 12; 
if($fourteen > 12) { 
    echo "Fourteen is more than twelve"; 
}else{ 
    echo "Fourteen is not more than twelve"; 
} 
+0

Genannter ternärer Operator. – sberry

+0

Wie @Gumbo darauf hingewiesen hat, ist dies nur ein ternärer Operator, nicht "der". "Ein anderer gebräuchlicher Begriff ist Bedingungsoperator." – strager

6

Im Interesse der Lesbarkeit sollte es so etwas wie

<?php 
    $countries = $myaddress->get_countries(); 
    foreach($countries as $value) { 
    $selected =''; 
    if($value=='United States') $selected ='selected="selected"'; 
    echo '<option value="'.$value.'"'.$selected.'>'.$value.'</option>'; 
    } 
?> 
seine

Wunsch, alles in einer einzigen Zeile zu stopfen ist ein Ableben, Mann. Schreiben Sie deutlich.

Aber es gibt einen anderen Weg, einen besseren. Es besteht keine Notwendigkeit, ein Echo zu verwenden. Lernen Sie, Vorlagen zu verwenden. Bereiten Sie zuerst Ihre Daten vor und zeigen Sie sie erst dann an.

Geschäftslogikteil:

$countries = $myaddress->get_countries(); 
$selected_country = 1;  

Template Teil:

<? foreach($countries as $row): ?> 
<option value="<?=$row['id']?>"<? if ($row['id']==$current_country):> "selected"><? endif ?> 
    <?=$row['name']?> 
</option> 
<? endforeach ?> 
Verwandte Themen