0

うまくいけば、誰かがこれを理解することができます...

私はまだphpで非常に新しく、立ち往生しています。

質問があります... foreach ループによって生成されたチェックボックスを含むリストがあり、各ボックスには値として多次元配列が必要です。

<input type='checkbox' name='unit[]' value='multidimensional array' />

次のような配列を含むファイルがあります。

$disclaimer = disclaimer;
$unit = array(
//EXTRAS
"0" => array("key0_key0" => "<h1>key0_key0_VALUE</h1>",
         "key0_key1" => "<li>key0_key1_VALUE</li>",
         "key0_key2" => "<li>key0_key2_VALUE</li>",
         "key0_key3" => "<li>key0_key3_VALUE</li>",
         "key0_key4" => "<li>key0_key4_VALUE</li>",                  
         "key0_key5" => "<li>key0_key_VALUE</li>",

         "key0_key6" => array("key0_key6_key1" => "<h1>key0_key6_key1_VALUE</h1>",
                              "key0_key6_key2" => "<li>key0_key6_key2_VALUE</li>"
                                                         ),
                                        ),
                  ),

//UNIT 1
"1" => array("key1_key0" => "<h1>key1_key0_VALUE</h1>",
         "key1_key1" => "<li>key1_key1_VALUE</li>",
         "key1_key2" => "<li>key1_key2_VALUE</li>",
         "key1_key3" => "<li>key1_key3_VALUE</li>",
         "key1_key4" => "<li>key1_key4_VALUE</li>",                  
         "key1_key5" => "<li>key1_key_VALUE</li>",

         "key1_key6" => array("key1_key6_key1" => "<h1>key1_key6_key1_VALUE</h1>",
                              "key1_key6_key2" => "<li>key1_key6_key2_VALUE</li>"
                                                         ),
                                        ),
                  ),    
//UNIT 2
"2" => array("key2_key0" => "<h1>key2_key0_VALUE</h1>",
         "key2_key1" => "<li>key2_key1_VALUE</li>",
         "key2_key2" => "<li>key2_key2_VALUE</li>",
         "key2_key3" => "<li>key2_key3_VALUE</li>",
         "key2_key4" => "<li>key2_key4_VALUE</li>",                  
         "key2_key5" => "<li>key2_key_VALUE</li>",

         "key2_key6" => array("key2_key6_key1" => "<h1>key2_key6_key1_VALUE</h1>",
                              "key2_key6_key2" => "<li>key2_key6_key2_VALUE</li>"
                                                         ),
                                        ),
);

これらは別のインクルード ファイルにあり、これらを表示する必要がある場合はいつでもインクルードします。

次に、私のページにこれが含まれており、その後に foreach ループが続き、各単位配列に対してチェックボックスの値を 1 ずつインクリメントするチェックボックスが表示されます。

$i = 0;

foreach($unit as $unit_no){
echo"<div class='pricelist-container'>";

if (is_array($unit_no)){

    foreach ($unit_no as $unit_details){

        if (is_array($unit_details)) {

            foreach ($unit_details as $unit_contents){

                if (is_array($unit_contents)){

                    foreach ($unit_contents as $extra){
                        echo $extra;
                    }
                }
                else{
                    echo $unit_contents;
                }
            }
        }

        else{
            echo $unit_details;
        }
    }
}
else{
    echo $unit_no;
}
echo"
$disclaimer
//below is where my problem seems to start.
<p class='fine'> <input type='checkbox' name='unit[]' value='" . "$" . "unit" . "[" . $i++ . "];' checked='checked' /> please uncheck to remove list</p>
<br />
</div>";
}

これが私の問題です...しかし、私はこれに非常に慣れていないため、ひどく間違っている可能性があります。

$var[key] を値として生成するには、これらのチェックボックスが必要です。フォームを送信した後、これらの変数を新しいページに渡して、配列ファイルを再度含める必要があるため、チェックボックスをループできます。ショートリストに再度表示します。しかし、インクルード ファイルにユニットが追加されるたびに、これらのユニットのそれぞれをエコー アウトするために小さなループを追加する必要があるような方法でコードを作成することはできません。なぜなら、このインクルード ファイルをデータベース ファイルに変更し、アップロード ページを作成するからです。サイトの所有者は、サイトに表示するために何も編集する必要なく、独自の新しいユニットを作成できます。

if(isset($_POST['unit'])){
            if (is_array($_POST['unit'])){
                foreach ($_POST['unit'] as $print_unit){
                    echo $print_unit;
                }
            }
        }
//this loop will echo out the $var[key] as strings. 

上記の foreach は $var を文字列としてエコーアウトしますが、キーがインクリメントされた $var としてはエコーアウトしません。

基本的には、印刷可能なリストに追加または削除するためのチェックボックスを備えた配列内の各製品のコンテンツを含む製品のリストです。チェックボックスの値を作成する以外はすべて機能します...

value='" . "$" . "unit" . "[" . $i++ . "];'

これにより、インクルードにあるすべての配列に $unit[1] という名前が作成されますが、実際の配列としてではなく、文字列 $unit[1] が生成され、それが最初のキーになります。

4

1 に答える 1