3

配列を作成するチャプターとサブチャプターを作成するための動的フォームがあります。

var_dump($_POST);

array{["textfield"] => array {
                       [0] => "title one"
                       [1] => "title two"
                       [2] => "title three"
                       [4] => "title four"
                       }
      ["textarea"] => array {
                       [0] => "title text"
                       [1] => "title summary"
                       [2] => "title description"
                       [4] => "title details"
                       }
      ["hidden"] => array {
                       [0] => "1"
                       [1] => "2"
                       [2] => "3"
                       [4] => "1"
                       }
      }

私は配列に非常に弱いです。多次元配列と並べ替えに関するいくつかの記事を読んだことがありますが、これをどのように調整する必要があるかを理解するために、運がなかったり、私のものによく似た例を見たりすることはありませんでした。

私はそれぞれのためにしたい:

<div class="row<? echo $hidden ?>">
    <h2><? echo $textfield ?></h2>
    <h3><? echo $textarea ?></h3>
</div>

キー 0 (または対応するキー番号) と値を複数の配列で一致させます。に似ている:

<div class="row<? echo $_POST['hidden'][0] ?>">
    <h2><? echo $_POST['textfield'][0] ?></h2>
    <h3><? echo $_POST['textarea'][0] ?></h3>
</div>
<div class="row<? echo $_POST['hidden'][1] ?>">
    <h2><? echo $_POST['textfield'][1] ?></h2>
    <h3><? echo $_POST['textarea'][1] ?></h3>
</div>
<div class="row<? echo $_POST['hidden'][2] ?>">
    <h2><? echo $_POST['textfield'][2] ?></h2>
    <h3><? echo $_POST['textarea'][2] ?></h3>
</div>
<div class="row<? echo $_POST['hidden'][3] ?>">
    <h2><? echo $_POST['textfield'][3] ?></h2>
    <h3><? echo $_POST['textarea'][3] ?></h3>
</div>

このフォームは何百もの深さで動的に作成される可能性があり、配列全体または各 $key のすべての $values しか出力できませんでした。さまざまな配列を介したマッチングに成功していません。

フォローしていただければ幸いです。何か提案があれば、私はとても感謝しています。

4

5 に答える 5

3

テンプレートでは:

<? for ($i = 0; $i < count($_POST['textfield']); $i++): ?>
<div class="row<? echo $_POST['hidden'][$i] ?>">
    <h2><? echo $_POST['textfield'][$i] ?></h2>
    <h3><? echo $_POST['textarea'][$i] ?></h3>
</div>
<? endfor; ?>

これはうまく機能しますが(ネストされた配列のそれぞれが同じ長さであると仮定します)、配列を構築するより適切な方法は次のようになると思います:

array{
    [0] => array{
        ["hidden"]    => "1"
        ["textarea"]  => "title text"
        ["textfield"] => "title one"
    }
    [1] => array{
        ["hidden"]    => "2"
        ["textarea"]  => "title summary"
        ["textfield"] => "title two"
    }
}

次に、ループは次のようになります。

<? foreach ($array as $chapter): ?>
<div class="row<? echo $chapter['hidden'] ?>">
    <h2><? echo $chapter['textfield'] ?></h2>
    <h3><? echo $chapter['textarea'] ?></h3>
</div>
<? endforeach; ?>
于 2012-04-19T16:01:14.717 に答える
2

$_POSTの各要素が他の要素と同じ長さであると仮定すると、 を使用count()していずれかの要素の長さを取得し (例: textfield)、forループを実行できます。

$length = count($_POST['textfield']);
for ($i = 0; $i < $length; $i++)
{
    echo $_POST['textfield'][$i];
}
于 2012-04-19T15:59:17.977 に答える
1

配列キーがわかっている場合は、代わりに for ループを使用できます。

for($i=0;$i<count($array);$i++){
    printf('<div class="row%s"><h2>%s</h2><h3>%s</h3></div>%s',$_POST['hidden'][$i],$_POST['textfield'][$i],$_POST['textarea'][$i],PHP_EOL);
}

シンプル!

于 2012-04-19T16:02:29.267 に答える
0

これはあなたが必要なものですか:

    <?php
// $x = %your_array

foreach ($x['hidden'] as $k => $v) {
?>
<div class="row<? echo $x['hidden'][$k] ?>">
    <h2><? echo $x['textfield'][$k]; ?></h2>
    <h3><? echo $x['textarea'][$k]; ?></h3>
</div>
<?php
}
?>
于 2012-04-19T16:07:53.043 に答える
0

セマンティック上の理由からテンプレートで foreach を実行したい場合は、次のように配列の次元を交換するために事前にいくつかの追加作業を行うことができます。

$rows = array();
for ($i = 0; $i < count($_POST['textfield']); $i++) {
    $rows[i]['title'] = $_POST['textfield'][$i];
    $rows[i]['text'] = $_POST['textarea'][$i];
    $rows[i]['hidden'] = $_POST['hidden'][$i];
}

次に、テンプレートで次のように foreach を実行できます。

<?php foreach ($rows as $row) { ?>
    <div class="row<? echo $row['hidden'] ?>">
        <h2><? echo $row['title'] ?></h2>
        <h3><? echo $row['text'] ?></h3>
    </div>
<?php } ?>
于 2012-04-19T16:09:19.277 に答える