2010-08-17 8 views
47

Sospecho que no está permitido porque recibo el error "Parse error: error de sintaxis, T_IF inesperado en ...". Pero no pude encontrar una manera de lograr mi objetivo. Aquí está mi código:si el bloque dentro de la declaración de eco?

<?php 

    $countries = $myaddress->get_countries(); 

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

Lo que hace es que muestra una lista de países en un elemento de selección y fija Estados Unidos como el valor predeterminado. Yo por desgracia no funciona ...

Respuesta

117

Usted tendrá que utilizar el un operador de ternary que actúa como un acortada sentencia if/else:

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

+1. --- golpéame. – sberry

+2

Así que ahí es donde el operador ternario es útil. Eso fue rápido, ¡muchas gracias! – Joann

+0

No es "mi preferencia" en situaciones como esta. Me gusta el operador ternario para las variables de default/setting. Pero dado que es lo que preguntas, hay cómo lo haces :) –

8

Utilice un ternary operator:

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

Y mientras lo hace, puede usar printf para hacer que su código sea más legible/manejable:

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

Siempre se puede usar la sintaxis (<condition> ? <value if true> : <value if false>) (se llama ternary operator - gracias a Mark por recordarme :)).

Si <condition> es verdadero, la declaración se evaluará como <value if true>. Si no es así, sería evaluada como <value if false>

Por ejemplo:

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

Esto es lo mismo que:

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

Llamado operador ternario. – sberry

+0

Como señaló @Gumbo, este es solo un operador ternario, no "el". "Otro término común es operador condicional". – strager

6

En aras de la legibilidad debería ser algo así como

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

deseo de llenar TODO en una sola línea es un fallecimiento, hombre. Escribe distintamente

Pero hay otra manera, una mejor. No hay necesidad de usar eco en absoluto. Aprenda a usar las plantillas . Prepare primero sus datos y muéstrelos solo listos para ese momento.

Negocio parte lógica: parte

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

Plantilla:

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