【问题标题】:PHP: Manipulating Multdimensional Array in Form Data?PHP:在表单数据中操作多维数组?
【发布时间】:2012-06-15 15:27:27
【问题描述】:

我有一个表格,其中包含一个人的名字和姓氏。用户可以使用链接添加多个人,该链接通过 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 组合插入一个新行。

【问题讨论】:

  • 为什么不将people 值设置为people[0][first]?那么每个数组元素将对应一行。

标签: php arrays multidimensional-array foreach


【解决方案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 />';
}

【讨论】:

  • @JeremyHolovacs 这样您就可以将每个人的信息组合在一起。它完全构建了 bsdnoobz 制作的数组,但不需要修改 HTML,这可能更适合 OP。
  • 我想知道如果其中一个字段为空白会发生什么。这会破坏同步性吗?这似乎为糟糕的设计创造了一种尴尬的解决方法。
  • @JeremyHolovacs 不,仍然会发布空白字段,它们只包含空字符串。恕我直言,将索引放入 HTML 是一种解决方法,因为它可能不太易于维护。如果您想在表单中添加更早的条目,则必须手动修改所有索引,将它们增加 1。
【解决方案2】:

像这样创建输入元素:

<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 />';
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2018-08-26
    • 1970-01-01
    • 2013-07-02
    • 2013-06-01
    相关资源
    最近更新 更多