PHP:在表单数据中操作多维数组?

时间:2012-06-12 17:38:59

标签: php arrays multidimensional-array foreach

我有一个表格,其中包含一个人的名字和姓氏。用户可以使用链接添加多个人,通过JS创建新的输入字段。以下是包含2个人的表单示例:

<form action="" method="post">
    <input type="text" class="required" name="people[first][]" />
    <input type="text" class="required" name="people[last][]" />

    <input type="text" class="required" name="people[first][]" />
    <input type="text" class="required" name="people[last][]" />

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

我正试图想出一种将这些数据插入数据库的方法。我尝试过使用:

foreach ($_POST['people'] as $person) {
  foreach ($person as $value) {
    echo $value . '<br/>';
  }
}

..导致

名字1
名字2
姓氏1 姓氏2

我正在尝试以某种方式对结果进行分组,以便为​​每个first name x + last name x组合插入新行。

2 个答案:

答案 0 :(得分:4)

像这样创建输入元素:

<input type="text" name="people[0][first]" />
<input type="text" name="people[0][last]" />
<input type="text" name="people[1][first]" />
<input type="text" name="people[1][last]" />

在你的PHP中:

foreach ($_POST['people'] as $person) {
  echo $person['first'].' '.$person['last'].'<br />';
}

答案 1 :(得分:1)

$_POST['people']['first']是一系列名字 $_POST['people']['last']是一个姓氏数组。

您可以将它们合并到一个数组数组中,如下所示:

$people = $_POST['people'];
$length = count($people['first']);
for($i = 0; $i < $length; $i++)
    $temp[] = array('first' => $people['first'][$i], 'last' => $people['last'][$i]);
$people = $temp;

$people中生成的数组将是一个关联数组数组,可能如下所示:

Array
(
    [0] => Array
        (
            [first] => Jim
            [last] => Smith
        )

    [1] => Array
        (
            [first] => Jenny
            [last] => Johnson
        )

)

这相当于你通过修改HTML得到的数组,因为bsdnoobz表明你也可以这样做。迭代它也是一样的:

foreach ($people as $person) {
    echo $person['first'] . ' ' . $person['last'] . '<br />';
}