0

好吧,我有一个包含一些输入的网页。

输入位于某些组中,并且全部采用一种形式。

输入可以动态添加到页面,但都遵循命名规则:numberA-numberB-any. 输入也可以从页面中删除。所以我最后可能会有这样的事情:

<form method="POST">
  <input name="3-1-c">

  <input name="8-2-d">
  <input name="8-3[]">
  <input name="8-3[]">

  <input name="17-2-a">
  <input name="17-2-d">
  ... a few or many other inpooots!
</form>

由于编号 A(第 2、第 3 和第 4 个输入,在第 8 组中),它们被分组

然后在服务器端使用 php;如何创建一个循环来读取按 numberA 排序的所有这些输入(因为我应该为每个 numberA 及其所有子集执行一些数据库操作)并且不会错过任何输入。

while (have_groups_of_inputs(?)) { // inputs with same numberA part
  while (have_items_in_this_group(?)) {
    do_the_job();
  }
}
echo 'thanks!';

$_POST 数据样本:

Array
(
    [itemcount] => 4
    [formid] => 
    [title] => Your info

    [1-title] => First name
    [1-hint] => your name
    [1-eltype] => 1
    [1-1] => Array
        (
            [0] => 
        )

    [3-title] => Last name
    [3-hint] => 
    [3-eltype] => 1
    [3-1] => Array
        (
            [0] => 
        )

    [4-title] => Gender
    [4-hint] => 
    [4-eltype] => 2
    [4-0] => Array
        (
            [0] => Male
            [1] => Female
        )
)
4

1 回答 1

1

嗨,您可以遍历 $_POST 数组并根据键存储值

foreach($_POST as $key=>$value){
    $parts = explode('-', $key);
    if(isset($parts[2])){
        $groups[$parts[0]][$parts[1]][$parts[2]] = $value; 
    }else{
        if(!isset( $groups[$parts[0]][$parts[1]])){
              $groups[$parts[0]][$parts[1]] = array();
        }
        $groups[$parts[0]][$parts[1]][] = $value;
    }
}

这应该会产生一个如下所示的数组

{
   '3':{
       '1':{
           'c': value_for_3-1-c
       }
   },
   '8':{
       '2':{
           'd': value_for_8-2-d
       },
       '3':[
           value_for_8-3[0],
           value_for_8-3[1],
       ]
   },
   '17':{
        '2':{
            'a': value_for_17-2-a,
            'd': value_for_17-2-d
        }
   }
}

那么如果你想遍历第 8 组中的每个项目

foreach($groups[8] as $b=>$sub){
    foreach($sub as $key=>$value){
        echo $key . ': ' . $value; 
    }
}

会导致:

d: value for 8-2-d
0: value for 8-3[0]
1: value for 8-3[1]
于 2013-10-26T21:46:55.923 回答