我正在开发一个表单生成器,以允许管理员创建自定义表单。我使用jQuery脚本在页面中插入新的HTML块。每个HTML块包含一系列表单字段,这些表单字段附加[]以作为数组处理。 (例如,question_number [])
我正在尝试根据数组键号找到一种将数组值组合在一起的方法。例如,将q_number [3],q_label [3],q_desc [3],q_format [3]等组合在一起......来自不同数组的键,按数组键号组合在一起。
这是我的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
)
如您所见,每个数组的值按键号坐标。
我正在寻找一种方法来做到这一点,并不需要知道数组中的键数。这是一个全国性的系统,每个教区都可以创建自己的形式,所以我需要一个可以动态匹配数组键的解决方案。 (一旦我将密钥组合在一起,我将为每组“问题”数据创建一个数据库记录,以便我可以生成用户将完成的表单。)
从这些中创建多维数组很容易 - 但我不知道如何将所有相同数字的键组合在一起。有没有办法用多维数组做到这一点?还是我还有另一条途径要追求?
非常感谢你的帮助。
答案 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);
?>