插入多条记录作为数组

3
<input name="name[]">
<input name="email[]">

<input name="name[]">
<input name="email[]">

<input name="name[]">
<input name="email[]">

....
....

提交包含这些字段的表单后,我试图构建一个类似于以下结构的数组:
array(

  array(
   'name'=> 'name1',
   'email' => 'email1'
  );

  array(
   'name'=> 'name2',
   'email' => 'email3'
  );

  array( ...
  ....
  ....
);

我之所以试图这样做,是因为我想将此数组序列化并将其保存到我的数据库中作为一个数据条目。是否可能?

4个回答

3
您可以使用循环逻辑。
if($_SERVER['REQUEST_METHOD']=='POST'){
    foreach ($_POST as $k=>$v){
   if(is_array($v)){
       foreach ($v as $sk=>$sv){ 
                $arr[$sk][$k]=$sv;
        }
       }
    }
  echo "<pre>";
  print_r($arr);
 }

2

更改你的命名规则:

<input name="myform[0][name]">
<input name="myform[0][email]">

<input name="myform[1][name]">
<input name="myform[1][email]">

您的数据数组:

$data = $_POST["myform"]

如果你能够这样做,这种方法比接收数据后重新排列数据要可靠得多。 - Simon

1
为了创建您所需的结构,您可以执行以下操作:
$data = array();

foreach ($_POST['email'] as $id => $email) {
  $data[$id]['email'] = $email;
}

foreach ($_POST['name'] as $id => $name) {
  $data[$id]['name'] = $name;
}

这会给你类似这样的东西:

Array
(
    [0] => Array
        (
            [email] => email1
            [name] => name1
        )

    [1] => Array
        (
            [email] => email2
            [name] => name2
        )

    [2] => Array
        (
            [email] => email3
            [name] => name3
        )

)

-2

您可以简单地序列化整个$_POST并保存它。

serialize($_POST);

或者

serialize($_GET);

这不会让您将不同的输入名称分组在一起,而不是以姓名/电子邮件、姓名/电子邮件...的结构排列吗?当然,还有其他可能被POST的内容。 - Simon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接