0

我有以下表格,它传递了一个名字、姓氏和年龄的数组。

<form method="post" action="form.php">
    <label for="first_name">First Name:</label>
    <input type="text" name="first_name[]" id="first_name" />
    <br />
    <label for="last_name">Last Name:</label>
    <input type="text" name="last_name[]" id="last_nametext" />
    <br />
    <label for="age">Age:</label>
    <input type="text" name="age[]" id="age" />
    <br />
    <br />
    <br />
    <label for="first_name">First Name:</label>
    <input type="text" name="first_name[]" id="first_name" />
    <br />
    <label for="last_name">Last Name:</label>
    <input type="text" name="last_name[]" id="last_nametext" />
    <br />
    <label for="age">Age:</label>
    <input type="text" name="age[]" id="age" />
    <br />
    <br />
    <br />
    <label for="first_name">First Name:</label>
    <input type="text" name="first_name[]" id="first_name" />
    <br />
    <label for="last_name">Last Name:</label>
    <input type="text" name="last_name[]" id="last_nametext" />
    <br />
    <label for="age">Age:</label>
    <input type="text" name="age[]" id="age" />
    <br />
    <input type="submit" name="save" id="save" value="Save" />
</form>

当我们提交表单时,我在 PHP 中收到以下数组结构。

Array
(
    [first_name] => Array
        (
            [0] => Dave
            [1] => Lisa
            [2] => Support
        )

    [last_name] => Array
        (
            [0] => Lucas
            [1] => Newman
            [2] => Services
        )

    [age] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )

    [save] => Save
)

如何将上述数组转换为以下结构,以便可以创建一个循环以一次将一条记录(first_name、last_name、age)添加到 MySQL db/table。

例如 first_name[0]、last_name[0] 和 age[0] 是一个记录。

我需要数组看起来类似于以下内容,以便循环插入数据。

Array
(
    [0] => Array
        (
            [first_name] => Steve
            [last_name] => Lucas
            [age] => 12
        )

    [1] => Array
        (
            [first_name] => Lisa
            [last_name] => Newman
            [age] => 44
        )

    [2] => Array
        (
            [first_name] => Owen
            [last_name] => McDowell
            [age] => 36
        )

    [save] => Save
)
4

2 回答 2

1
$count = count ($array_in);

$array_out = array ();

for ($i = 0; $i < $count; $i++)
{
    $array_out[] = array
    (
        'first_name' => $array_in['first_name'][$i],
        'last_name' => $array_in['last_name'][$i],
        'age' => $array_in['age'][$i]               
    );

}

print_r ($array_out);
于 2013-09-18T22:38:01.077 回答
0

就个人而言,我认为您应该更改表单(如果可能),以便输出您实际想要的数组。

目前,您正在输出您不想要的东西,只是将其更改为您想要的东西,而您最初可以输出您想要的东西。这意味着更少的代码,因此更整洁、更快、更易于维护等。

您可以将您的 HTML 表单更改为此..
我刚刚更改了name=""每个输入的,因此每个表单都添加到同一个数组中,但是每个表单(即每个第一个、最后一个、年龄)都有自己的子数组:

 <form method="post" action="form.php">
    <label for="first_name">First Name:</label>
    <input type="text" name="array[0][first_name]" id="first_name" />
    <br />
    <label for="last_name">Last Name:</label>
    <input type="text" name="array[0][last_name]" id="last_nametext" />
    <br />
    <label for="age">Age:</label>
    <input type="text" name="array[0][age]" id="age" />
    <br />
    <br />
    <br />
    <label for="first_name">First Name:</label>
    <input type="text" name="array[1][first_name1]" id="first_name" />
    <br />
    <label for="last_name">Last Name:</label>
    <input type="text" name="array[1][last_name]" id="last_nametext" />
    <br />
    <label for="age">Age:</label>
    <input type="text" name="array[1][age]" id="age" />
    <br />
    <br />
    <br />
    <label for="first_name">First Name:</label>
    <input type="text" name="array[2][first_name]" id="first_name" />
    <br />
    <label for="last_name">Last Name:</label>
    <input type="text" name="array[2][last_name]" id="last_nametext" />
    <br />
    <label for="age">Age:</label>
    <input type="text" name="array[2][age]" id="age" />
    <br />
    <input type="submit" name="save" id="save" value="Save" />
</form>

这会给你这个:

Array
(
  [array] => Array 
    ( 
      [0] => Array
        (
            [first_name] => Steve
            [last_name] => Lucas
            [age] => 12
        )

      [1] => Array
        (
            [first_name] => Lisa
            [last_name] => Newman
            [age] => 44
        )

      [2] => Array
        (
            [first_name] => Owen
            [last_name] => McDowell
            [age] => 36
        )

      [save] => Save
   )
)

插入数据库时​​,您可以轻松地循环遍历这些内容。



做你想做的事:

Array
(
    [0] => Array
        (
            [first_name] => Steve
            [last_name] => Lucas
            [age] => 12
        )
//etc

您必须将数组名称设置为数字,以便根据需要将每个子数组的索引设置为数字,例如:

 <form method="post" action="form.php">
    <label for="first_name">First Name:</label>
    <input type="text" name="0[first_name]" id="first_name" />
    <br />
    <label for="last_name">Last Name:</label>
    <input type="text" name="0[last_name]" id="last_nametext" />
    <br />
    <label for="age">Age:</label>
    <input type="text" name="0[age]" id="age" />
    <br />
    <br />
    <br />
    <label for="first_name">First Name:</label>
    <input type="text" name="1[first_name]" id="first_name" />
    <br />
    <label for="last_name">Last Name:</label>
    <input type="text" name="1[last_name]" id="last_nametext" />
    <br />
    <label for="age">Age:</label>
    <input type="text" name="1[age]" id="age" />
    <br />
    <br />
    <br />
    <label for="first_name">First Name:</label>
    <input type="text" name="2[first_name]" id="first_name" />
    <br />
    <label for="last_name">Last Name:</label>
    <input type="text" name="2[last_name]" id="last_nametext" />
    <br />
    <label for="age">Age:</label>
    <input type="text" name="2[age]" id="age" />
    <br />
    <input type="submit" name="save" id="save" value="Save" />
</form>

我不认为这是一个好主意。

于 2013-09-18T23:20:40.927 回答