Frage

    

Diese Frage bereits eine Antwort hier:

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

Ich verstehe nicht den letzten Schnipsel dieses Codes „? $_POST['items'] : array();

Was bedeutet, dass die Kombination von Code genau das tun?

Ich benutze es in einer Reihe von Werten von HTML-Textfeldern zu nehmen und es in eine Session-Array zu speichern. Aber das Problem ist, wenn ich die Daten in Textfeldern die neue Array-Sitzung überschreibt die alte Sitzung Array vollständig Leerzeichen und all erneut zu senden versuchen.

Ich möchte nur Orte im Array zu überschreiben, die bereits Werte haben. Wenn der Benutzer nur ein paar Textfelder ausfüllen entscheidet ich will nicht die vorherigen Sitzung Arraydaten durch Leerzeichen überschrieben werden (von den leeren Textfeldern).

Ich denke, der obige Code das Problem ist, aber ich bin nicht sicher, wie es funktioniert. Erleuchten Sie mich bitte.

War es hilfreich?

Lösung

Dies ist a ternäre Operator :

Der Ausdruck (expr1) ? (expr2) : (expr3) ausgewertet expr2 wenn expr1 TRUE auswertet und expr3 wenn expr1 ausgewertet FALSE.

Andere Tipps

Der letzte Teil ist bekannt als Bedingungsoperator . Im Grunde ist es eine verkürzte if/else Aussage.

Es funktioniert wie folgt:

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

Auch hier ist ein Pseudo-Code, der einfacher sein kann:

$items = (condition) ? value_if_condition_true : value_if_condition_false;

Edit: Hier ist eine kurze, pedantisch Randnotiz: Die PHP-Dokumentation nennt diesen Operator einen ternärer Operator . Während der Bedingungsoperator ist technisch ein ternärer Operator (das heißt, ein Bediener mit 3 Operanden) es ist eine falsche Bezeichnung (und eher vermutliche) nennt es die ternäre Operator.

Schauen Sie sich Paolo Antwort den ternären Operator zu verstehen.

tun, was Sie tun, suchen Sie können eine Session-Variable verwendet werden soll.

Am oberen Rand der Seite dieses setzen (weil Sie nicht ausgegeben etwas auf die Seite, bevor Sie eine Sitzung starten. I.E. NO ECHO STATEMENTS)

session_start();

Dann, wenn ein Benutzer das Formular einreicht, das Ergebnis in diesem Server-Variable speichern. Wenn dies das erste Mal ist der Benutzer das Formular abgeschickt, es ist nur direkt speichern, sonst durchlaufen und einen beliebigen Wert hinzufügen, die nicht leer ist. Sehen Sie, wenn dies ist, was Sie suchen:

HTML-Code (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>

Verarbeitungscode (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 ist das gleiche wie:

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

Im Grunde genommen, wenn $ _POST [ ‚Artikel‘] existiert dann $ Elemente es anders gesetzt werden es wird auf ein leeres Array gesetzt.

Es ist ein ternärer Operator, der sagt im Wesentlichen, wenn der Artikel Schlüssel ist in dem $ _POST dann $ Artikel den Wert von $ _POST [ ‚Artikel‘] sonst setzt sie auf ein Null-Array entsprechen.

Habe ich es auch ist erwähnenswert, dass ?: einen separaten Operator ist, wobei gilt:

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

ist eine Abkürzung für:

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

Abgesehen von weniger eingeben, ist die Laufzeit Vorteil, dass, wenn eine Funktion wie two() verwendet, würde die Funktion nur einmal die Kurzform mit ausgewertet werden, aber möglicherweise doppelt so langen Formular.

yup ... es ist ternärer Operator

eine einfache und klare Erklärung zur Verfügung gestellt hier , in dem der Autor sagte, es ist wie zu beantworten: „Nun, es ist wahr“

der Doppelpunkt trennt zwei mögliche Werte (oder). der erste Wert wird, wenn der Test Ausdruck wahr ist gewählt. die zweite (hinter dem Doppelpunkt) gewählt werden, wenn die ersten Antworten falsch sind.

ternärer Operator sehr hilfreich in den Variablen in PHP 7.x erstellen, frei von Ankündigung Warnung. Zum Beispiel "

$mod = isset($_REQUEST['mod']) ? $_REQUEST['mod'] : "";
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top