0

誰かが私を正しい方向に向けることができますか

FROM にこの HTML があります (この例では単純化されています):

=============== HTML を開始 ===================

<select name="Postage[]" id="Unique-ID">
    <option value="1">Postage Option 1</option>
    <option value="2">Postage Option 2</option>
    <option value="3">Postage Option 3</option>
</select>
<input name="PostagePrice[]" id="Price-Unique-ID" value="" />

<select name="Postage[]" id="Unique-ID">
    <option value="1">Postage Option 1</option>
    <option value="2">Postage Option 2</option>
    <option value="3">Postage Option 3</option>
</select>
<input name="PostagePrice[]" id="Price-Unique-ID" value="" />

<select name="Postage[]" id="Unique-ID">
    <option value="1">Postage Option 1</option>
    <option value="2">Postage Option 2</option>
    <option value="3">Postage Option 3</option>
</select>
<input name="PostagePrice[]" id="Price-Unique-ID" value="" />

================== HTML終了 =====================

これをフォームから収集し、以下のコードで配列 ($arrPostageOptions) に設定しています。

=============== PHPを起動 ===================

if (isset($_POST['Postage'])) {
    if (is_array($_POST['Postage'])) {
        $n = count($_POST['Postage']);
        for ($i = 0; $i < $n; ++$i) {
            // check to only collect completed entries
            if( !empty($_POST['Postage'][$i]) && !empty($_POST['PostagePrice'][$i]) ){
                // assign to array
                $arrPostageOptions[$i] = array( "Postage" => $_POST['Postage'][$i], "PostagePrice" => $_POST['PostagePrice'][$i], );
            }
        }
    }
}  

=============== PHP終了 ===================

これにより、次の配列が得られます

============ 配列の結果 ===============

Array(
    [0] => Array
        (
            [Postage] => 1
            [PostagePrice] => 12
        )
    [1] => Array
        (
            [Postage] => 2
            [PostagePrice] => 24
        )
    [2] => Array
        (
            [Postage] => 3
            [PostagePrice] => 48
        )
)

============ 配列結果の終了 ===============

私が望む答え(私が思う)は、各配列に対して次のとおりです。

1 & 12

2 & 24

3 & 48

(配列番号が郵便番号と一致するのは単なる偶然です。'Postage' と 'PostagePrice' だけが必要です)

私は次のことを試みています:

=========== 私がしようとしていることの始まり ==========

foreach ($arrPostageOptions as $id) {
    while ($id) {
        $Postage = $id["Postage"];
        $PostagePrice = $id["PostagePrice"];
        // echo $Postage.' '.$PostagePrice.'<br>';
        unset($id);
        if (!$listing_obj->addPostageOptions($ListingID, $PostageOptionID, $PostagePrice, $db)) {
           $err_text .= 'An error occurred adding Postage Option'.$PostageOptionID;
        }
    }   
}

====== 私がしようとしていることの終わり ==============

残念ながら、これは期待どおりに機能していません (しかし、これは私が得た最も近いものです)。また、複数の foreach ループを試しましたが、再び何を取得できません ($id を不安定にすると、ループが永遠に続行されなくなりますが、未定義変数 $id の PHP 通知も表示されます)。

私はこれを行う方法を知っていると確信していますが、これらの配列はまだ私を混乱させているため、忘れて複雑になりすぎている可能性があります。

どんなアドバイスでも大歓迎です!

4

4 に答える 4

1

あなたが何をしたいのか完全にはわかりませんが、このように配列を反復したいように思えますが、よくわかりません。

foreach ($arrPostageOptions as $id=>$array) {
  foreach($array as $key=>$val){
    // do your stuff here using where you can also reference $id
  }
}
于 2013-07-20T18:26:56.443 に答える
1

私が言いたいことがいくつかあります。 isset 関数はここでは少し無意味であり、テキスト フィールドやその他の入力ではなく、送信ボタンと一緒に使用するのが最適です。

また、ループ内で配列を宣言しているため、外部のどこにでもアクセスすると未定義のエラーが発生します。

私はちょうどあなたのフォームを使用し、あなたが望む出力を与えるためにphpスクリプトを少し更新しました. ご覧ください。

あなたのフォーム

<form action="yourscript.php" method="POST">

    <select name="Postage[]" id="Unique-ID">
    <option value="1">Postage Option 1</option>
    <option value="2">Postage Option 2</option>
    <option value="3">Postage Option 3</option>
    </select>
    <input name="PostagePrice[]" id="Price-Unique-ID" value="" />

    <select name="Postage[]" id="Unique-ID">
        <option value="1">Postage Option 1</option>
        <option value="2">Postage Option 2</option>
        <option value="3">Postage Option 3</option>
    </select>
    <input name="PostagePrice[]" id="Price-Unique-ID" value="" />

    <select name="Postage[]" id="Unique-ID">
        <option value="1">Postage Option 1</option>
        <option value="2">Postage Option 2</option>
        <option value="3">Postage Option 3</option>
    </select>
    <input name="PostagePrice[]" id="Price-Unique-ID" value="" />

    <input type="submit" value="submit" name="submit"/>

    </form>

もう少し明確にするために、ヘッダーに送信ボタンとメソッドとアクションを追加しました。

そして、これが私が使用したスクリプトです。あなたのものとかなり似ています

<?php

    $arrPostageOptions = array();

    if(isset($_POST['submit']))
    {
        $postage = $_POST['Postage'];
        $postagePrice = $_POST['PostagePrice'];

        $array_size = count($postage);

        for($i = 0; $i < $array_size; $i++)
        {
            if(!empty($postage[$i]) && !empty($postagePrice[$i]))
            {
                $arrPostageOptions[$i] = array("Postage"=>$postage[$i], 
                            "PostagePrice"=>$postagePrice[$i]);  
            }
        }
        print_r($arrPostageOptions);
    }

?>

送信ボタンが設定/クリックされているかどうかを確認し、ループに入ります。配列変数を外部で定義して、プログラムのどこでも使用できるようにします。

print_r の結果が表示される場合は、目的の形式で配列が表示されます。

いくつかの質問に答えていただければ幸いです。

同時に、$_POST['name'] を直接使用するよりも、POST データを使用する前に常に変数に入れておくことをお勧めします。これは、データベースやその他の関連するものを操作するときに役立ちます。

お役に立てれば。

ありがとう、ショーン。

于 2013-07-20T18:58:14.687 に答える
1

なぜ単純ではないのですか:

foreach ($arrPostageOptions as $postageOption) {
    $postage = $postageOption["Postage"];
    $postagePrice = $postageOption["PostagePrice"];
    echo $postage.' '.$postagePrice.'<br>';
    ...
}

名前を変更して申し訳ありませんが、$id は私にはわかりにくかったです。

于 2013-07-20T18:34:09.043 に答える
0

while内のはforeach冗長です。とにかくforeachなる新しいエントリがある限り続くだけです。$id

while を削除すれば、ループは問題ないはずです。データが有効かどうかをテストする場合は、これをループに入れて配列キー自体をテストします

if(!$id["Postage"] || !$id["PostagePrice"]){
  continue;  
  }
于 2013-07-20T18:28:57.650 に答える