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

このコードの最後のスニペットがわかりません " ? $_POST['items'] : array();"

そのコードの組み合わせは正確に何をしますか?

これを使用して、html テキスト ボックスから一連の値を取得し、それをセッション配列に格納します。しかし問題は、テキスト ボックスにデータを再送信しようとすると、新しい配列セッションが古いセッション配列を完全に空白のまま上書きしてしまうことです。

既に値がある配列内の場所のみを上書きしたい。ユーザーがいくつかのテキスト ボックスのみに入力することにした場合、以前のセッション配列データが (空白のテキスト ボックスから) 空白で上書きされることは望ましくありません。

上記のコードが問題だと思いますが、どのように機能するのかわかりません。教えてください。

4

8 に答える 8

45

これは 項演算子です:

式は、(expr1) ? (expr2) : (expr3) 評価されるexpr2場合expr1は に評価されTRUE、評価されるexpr3場合は にexpr1評価されFALSEます。

于 2009-05-20T18:05:58.877 に答える
18

その最後の部分は、条件演算子として知られています。基本的には要約if/else文です。

それはこのように動作します:

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

また、より単純な疑似コードを次に示します。

$items = (condition) ? value_if_condition_true : value_if_condition_false;

編集:これは簡単でペダンティックな補足です:PHPドキュメントでは、この演算子を三項演算子と呼んでいます。条件演算子は技術的には 3 項演算子 (つまり、3 つのオペランドを持つ演算子) ですが、それを 3 項演算子と呼ぶのは誤った呼び方です (かなり推定的です)

于 2009-05-20T18:05:46.523 に答える
2

パオロの答えを見て、三項演算子を理解してください。

見ていることを行うには、セッション変数を使用することをお勧めします。

ページの上部にこれを置きます(セッションを開始する前にページに何も出力できないためです.IE NO ECHO STATEMENTS)

session_start();

次に、ユーザーがフォームを送信したら、結果をこのサーバー変数に保存します。ユーザーがフォームを送信したのが初めての場合は、直接保存するか、循環して空でない値を追加します。これがあなたが探しているものかどうかを確認してください:

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>

処理コード (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>';
}
?>
于 2009-05-21T17:31:41.127 に答える
2

以下と同じです。

if (isset($_POST['items']){
    $items = $_POST['items'];
} else {
    $items = array();
}
于 2009-05-20T18:09:39.947 に答える
0

基本的に、 $_POST['items'] が存在する場合、 $items がそれに設定されます。それ以外の場合は、空の配列に設定されます。

于 2009-05-20T18:06:22.543 に答える
0

これは基本的に、items キーが $_POST にある場合、$items を $_POST['items'] の値と等しくなるように設定するか、それ以外の場合は null 配列に設定することを示す三項演算子です。

于 2009-05-20T18:08:41.603 に答える