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

If you did want to do a foreach in the template for semantic reasons, you could so some extra work beforehand to swap the dimensions of the array like:

$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];
}

Then you could do a foreach in your template like so:

<?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 回答
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 回答