将多个关联数组数据插入MySQL数据库

时间:2013-09-18 22:08:38

标签: php mysql sql arrays

我有以下表格,它传递一系列名字,姓氏和年龄。

<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数据库/表。

e.g。 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
)

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

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

目前,当您可以首先输出您想要的内容时,您正在输出您不希望将其更改为您想要的内容的内容。这意味着代码更少,因此更整洁,更快速,更易于维护等。

您可以将HTML表单更改为此。
我刚刚更改了每个输入的name="",因此每个表单都添加到同一个数组中,但每个表单(即每个first,last,age)都有自己的子数组:

 <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>

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