PHP meter una sentencia if dentro de un echo

Digamos que quieres hacer algo así:

[code lang=”php”]
echo ‘<option value="’.$value.’"’.if($value==’España’) echo ‘selected="selected"’;.’>’.$value.'</option>’;
[/code]

Esto claro está va a fallar porque no se puede meter sentencias de control dentro de un echo.

Para ello, se puede usar un pequeño truco usando el operador ternary (o ternario) para similar una sentencia if/else. Bueno no simula nada, porque es en sí un operador condicional.

Se define de la siguiente manera “?:”

[code lang=”php”]
<?php
// Ejemplo de uso para: Operador Ternario
$action = (empty($_POST[‘action’])) ? ‘default’ : $_POST[‘action’];

// Lo anterior es idéntico a esta sentencia if/else
if (empty($_POST[‘action’])) {
$action = ‘default’;
} else {
$action = $_POST[‘action’];
}

?>
[/code]

La expresión (expr1) ? (expr2) : (expr3) evalúa a expr2 si expr1 se evalúa como TRUE y a expr3 si expr1 se evalúa como FALSE.

A partir de PHP 5.3, es posible dejar de lado la parte media del operador ternario. La expresión expr1 ?: expr3 retorna expr1 si expr1 se evalúa como TRUE y expr3 si es de otra manera.

De esta manera ya podremos tener la siguiente lógica en nuestro formulario para verificar si esta seleccionado o no usando una sentencia de control.

[code lang=”PHP”]
echo ‘<option value="’.$value.’" ‘.(($value==’España’)?’selected="selected"’:"").’>’.$value.'</option>’;
[/code]

El operador ternario puede se un poco complejo en algunos casos.

[code lang=”php”]
<?php
echo "a string that has a " . (true) ? ‘true’ : ‘false’ . " condition in. ";
?>
[/code]

Imprimirá true.

Para comparar todo el conjunto hacer lo siguiente:

[code lang=”php”]
<?php
echo "a string that has a " . ((true) ? ‘true’ : ‘false’) . " condition in. ";
?>
[/code]

Esto evaluará todo el string como se espera: “a string that has a true condition in. ”

Otro artículo de Interés:  Estadísticas y Uso de memcache en gráficas con memcache.php

Fuente: php.net Operadores de comparación

3 comentarios en «PHP meter una sentencia if dentro de un echo»

Deja un comentario

Enable Notifications    Ok No thanks