without operator inside else php syntax ternary-operator

php - operator - Que hace ?...:... hacer?



php ternary operator shorthand (8)

Esta pregunta ya tiene una respuesta aquí:

$items = (isset($_POST[''items''])) ? $_POST[''items''] : array();

No entiendo el último fragmento de este código " ? $_POST[''items''] : array(); "

¿Qué hace exactamente esa combinación de código?

Lo uso para tomar un montón de valores de cuadros de texto html y almacenarlos en una matriz de sesión. Pero el problema es que, si intento volver a enviar los datos en los cuadros de texto, la nueva sesión de matriz sobrescribe la matriz de la sesión anterior con espacios en blanco y todo.

Solo quiero sobrescribir los lugares en la matriz que ya tienen valores. Si el usuario decide llenar solo unos pocos cuadros de texto, no quiero que los datos de la matriz de la sesión anterior se sobrescriban con espacios en blanco (de los cuadros de texto en blanco).

Estoy pensando que el código anterior es el problema, pero no estoy seguro de cómo funciona. Ilumíname por favor.


Básicamente, si $ _POST [''items''] existe, entonces $ items se establece en él, de lo contrario se establece en una matriz vacía.


Es lo mismo que:

if (isset($_POST[''items'']){ $items = $_POST[''items'']; } else { $items = array(); }


Es un operador ternario que esencialmente dice que si la clave de los elementos está en $ _POST, luego establezca $ items para que sea igual al valor de $ _POST [''items''], de lo contrario, establezca una matriz nula.


Esa última parte se conoce como el operador condicional . Básicamente es una sentencia if/else condensada.

Funciona así:

$items = // if this expression is true (isset($_POST[''items''])) // then "$_POST[''items'']" is assigned to $items ? $_POST[''items''] // else "array()" is assigned : array();

También aquí hay algunos pseudocódigos que pueden ser más simples:

$items = (condition) ? value_if_condition_true : value_if_condition_false;

Edición: Aquí hay una nota rápida y pedante: la documentación de PHP llama a este operador un operador ternario . Mientras que el operador condicional es técnicamente un operador ternario (es decir, un operador con 3 operandos) es un nombre inapropiado (y más bien presuntivo) llamarlo el operador ternario.


Este es un operador ternario :

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


Mira la respuesta de Paolo para entender el operador ternario.

Para hacer lo que está buscando hacer, es posible que desee utilizar una variable de sesión.

En la parte superior de la página, coloque esto (ya que no puede enviar nada a la página antes de iniciar una sesión. IE NO HAY DECLARACIONES DE ECHO)

session_start();

Luego, cuando un usuario envíe su formulario, guarde el resultado en esta variable de servidor. Si esta es la primera vez que el usuario envía el formulario, simplemente guárdelo directamente; de ​​lo contrario, realice un ciclo y agregue cualquier valor que no esté vacío. Mira si esto es lo que buscas:

CÓDIGO HTML (testform.html):

<html> <body> <form name="someForm" action="process.php" method="POST"> <input name="items[]" type="text"> <input name="items[]" type="text"> <input name="items[]" type="text"> <input type="submit"> </form> </body> </html>

Código de procesamiento (process.php):

<?php session_start(); if(!$_SESSION[''items'']) { // If this is the first time the user submitted the form, // set what they put in to the master list which is $_SESSION[''items'']. $_SESSION[''items''] = $_POST[''items'']; } else { // If the user has submitted items before... // Then we want to replace any fields they changed with the changed value // and leave the blank ones with what they previously gave us. foreach ($_POST[''items''] as $key => $value) { if ($value != '''') { // So long as the field is not blank $_SESSION[''items''][$key] = $value; } } } // Displaying the array. foreach ($_SESSION[''items''] as $k => $v) { echo $v,''<br>''; } ?>


Pensé que también vale la pena señalar que ?: Es un operador separado, donde:

$one = $two ?: $three; $one = two() ?: three();

es taquigrafía para:

$one = $two ? $two : $three; $one = two() ? two() : three();

Además de escribir menos, la ventaja del tiempo de ejecución es que, si utiliza una función como two() , la función solo se evaluará una vez utilizando la forma abreviada, pero posiblemente dos veces utilizando la forma larga.


yup ... es operador ternario

Una explicación simple y clara que se proporciona here , en la que el autor dijo que es como responder: "Bueno, ¿es cierto?"

El colon separa dos valores posibles (o). el primer valor será elegido si la expresión de prueba es verdadera. el segundo (detrás de los dos puntos) se elegirá si las primeras respuestas son falsas.

operador ternario muy útil para crear variables en php 7.x, sin previo aviso. Por ejemplo"

$mod = isset($_REQUEST[''mod'']) ? $_REQUEST[''mod''] : "";