按数组键号(非键值)从多个数组中键组键(PHP)

时间:2017-04-19 19:22:04

标签: php arrays multidimensional-array

我正在开发一个表单生成器,以允许管理员创建自定义表单。我使用jQuery脚本在页面中插入新的HTML块。每个HTML块包含一系列表单字段,这些表单字段附加[]以作为数组处理。 (例如,question_number [])

我正在尝试根据数组键号找到一种将数组值组合在一起的方法。例如,将q_number [3],q_label [3],q_desc [3],q_format [3]等组合在一起......来自不同数组的键,按数组键号组合在一起。

HTML

这是我的jQuery脚本输出的基本HTML,因此您可以看到外出的变量:

<input name="q_number[]" type="text" class="q-number" placeholder="E.g., 148">
<select name="q_format[]" class="q-format">
    <option value="text">Simple text field</option><option value="number">Number field</option>
    <option value="textarea">Paragraph textbox</option>
    <option value="checkbox">Checkbox</option>
    <option value="radio">Radio - choose from a list</option>
    <option value="select">Dropdown select</option>
</select>
<input name="q_title[]" type="text" class="q-title" placeholder="E.g., Types of services held in 2016">
<textarea name="q_desc[]" class="q-desc" placeholder="Explanation to clarify the question."></textarea>
<textarea name="options[]" class="q-options" placeholder="option 1, option 2, option 3, etc."></textarea>
<input type="checkbox" checked="checked" name="required[]" value="1" class="q-required">

数组数据

以下是在处理表单时将结果数组显示的内容,并在表单中添加了3个问题:

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

    [q_format] => Array
        (
            [0] => number
            [1] => radio
            [2] => radio
        )

    [q_title] => Array
        (
            [0] => Number of baptisms this year
            [1] => Which service do you like best?
            [2] => Which demographic is increasing most quickly?
        )

    [q_desc] => Array
        (
            [0] => 
            [1] => 
            [2] => 
        )

    [options] => Array
        (
            [0] => 
            [1] => Holy Eucharist, Baptism, Confirmation, Wedding, Funeral
            [2] => Infants, Children, Youth
        )

    [required] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 1
        )

如您所见,每个数组的值按键号坐标。

我正在寻找一种方法来做到这一点,并不需要知道数组中的键数。这是一个全国性的系统,每个教区都可以创建自己的形式,所以我需要一个可以动态匹配数组键的解决方案。 (一旦我将密钥组合在一起,我将为每组“问题”数据创建一个数据库记录,以便我可以生成用户将完成的表单。)

从这些中创建多维数组很容易 - 但我不知道如何将所有相同数字的键组合在一起。有没有办法用多维数组做到这一点?还是我还有另一条途径要追求?

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

使用key=>value迭代其中一个数组并从其他数组中获取相同的key

foreach ($_POST['q_number'] as $key => $value) {
    echo $value, ' ', $_POST['q_title'][$key], ' ', $_POST['q_desc'][$key]; // etc
}

答案 1 :(得分:0)

两次循环

无需知道密钥的名称,您可以使用两个循环来完成此操作

<?php
$data = [];
$data['q_number'] = [];
$data['q_number'][] = 1;
$data['q_number'][] = 2;
$data['q_number'][] = 3;

$data['q_answer'][] = "a";
$data['q_answer'][] = "b";
$data['q_answer'][] = "c";


$data['q_required'][] = true;
$data['q_required'][] = false;
$data['q_required'][] = false;

$grouped = [];

foreach($data as $key =>$valueset){
  $counter = 0;
  foreach($valueset as $key2 => $value){
    $grouped[$counter][$key] = $value;
    $counter +=1;
  }

}

var_dump($grouped);
?>