Pregunta

    

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é tiene esa combinación de código de hacer exactamente?

Lo utilizo para tomar en un montón de valores a partir de cuadros de texto HTML y almacenarla en una matriz de sesión. Pero el problema es, si intento volver a presentar los datos en los cuadros de texto de la nueva sesión gama sobrescribe la matriz de edad sesión de espacios en blanco por completo y todo.

Sólo quiero sobreescribir lugares en el array que ya tienen valores. Si el usuario decide que llenar sólo unos pocos cuadros de texto que no quiero la matriz de datos de la sesión anterior a ser sobrescritos por espacios en blanco (de los cuadros de texto en blanco).

Estoy pensando en el código anterior es el problema, pero no estoy seguro de cómo funciona. por favor me ilumine.

¿Fue útil?

Solución

Este es a ternario operador :

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

Otros consejos

Esta última parte es conocido como el operador condicional . Básicamente se trata de una declaración if/else condensada.

Funciona de esta manera:

$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 es aquí algunos pseudo-código que puede ser más simple:

$items = (condition) ? value_if_condition_true : value_if_condition_false;

Editar Este es un pedante nota lateral rápida: La documentación de PHP llama a este operador de un operador ternario . Mientras que el operador condicional es técnicamente un operador ternario (es decir, un operador con 3 operandos) es un término equivocado (y bastante presuntivo) llamarlo la operador ternario.

Mire la respuesta de Paolo para entender el operador ternario.

Para hacer lo que usted está mirando que hace es posible que desee utilizar una variable de sesión.

En la parte superior de la página de poner esto (porque se puede nada no se emiten a la página antes de iniciar una sesión. POR EJEMPLO LOS ESTADOS NO ECHO)

session_start();

A continuación, cuando un usuario envía el formulario, guardar el resultado en esta variable de servidor. Si esta es la primera vez que el usuario envía el formulario, simplemente guardarlo directamente, de lo contrario recorrer y añadir cualquier valor que no está vacío. A ver si esto es lo que busca:

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>';
}
?>

Es lo mismo que:

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

Básicamente, si existe $ _POST [ ''] artículos a continuación, $ artículos consigue el sistema para que de lo contrario se vuelve a establecer como un conjunto vacío.

Es un operador ternario que esencialmente dice que si la clave de artículos está en el $ _POST continuación, establezca $ items para igualar el valor de $ _POST [ 'artículos'] otra cosa ponerlo en una matriz nula.

pensé que también vale la pena señalar que ?: es un operador independiente, donde:

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

es la abreviatura:

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

Aparte de escribir menos, la ventaja de tiempo de ejecución es que, si se utiliza una función como two(), la función sólo sería evaluada una vez usando la forma abreviada, pero posiblemente dos veces utilizando la forma larga.

yup ... es operador ternario

una explicación simple y claro siempre y aquí , en el que el autor dijo que es como si respondiera: “? Bueno, es verdad”

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) será elegido si las primeras respuestas es falsa.

operador ternario muy útil en la creación de variable en php 7.x, sin advertencia previa notificación. Por ejemplo "

$mod = isset($_REQUEST['mod']) ? $_REQUEST['mod'] : "";
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top