考虑这个简单的形式:
<?php
if (!empty($_GET)) {
echo '<pre>', print_r($_GET, true), '</pre>';
}
?>
<form>
<input type="text" name="widget[name][]" />
<input type="text" name="widget[version][]" />
<input type="text" name="widget[name][]" />
<input type="text" name="widget[version][]" />
<br />
<button type="submit">Submit</button>
</form>
发送数据时,它提供以下输出:
(我分别输入了虚拟值name1,name2和version1,version2)
Array
(
[widget] => Array
(
[name] => Array
(
[0] => name1
[1] => name2
)
[version] => Array
(
[0] => version1
[1] => version2
)
)
)
我真正想做的是把它变成这个:
Array
(
[widget] => Array
(
[0] => Array(
[name] => name1,
[version] => version1
),
[1] => Array(
[name] => name2,
[version] => version2
)
)
)
所以,我一直试图实现一种递归转换为算法的算法,但我已经多次失败了。 所以我放弃了,需要你们从不同角度看待这个问题。有什么想法吗?
答案 0 :(得分:1)
您无法更改HTML,它是不正确的吗?
<form>
<input type="text" name="widget[0][name]" />
<input type="text" name="widget[0][version]" />
<input type="text" name="widget[1][name]" />
<input type="text" name="widget[1][version]" />
<br />
<button type="submit">Submit</button>
</form>
如果它是从PHP循环自动生成的,你仍然可以操作计数器(0,1 ...);
对于代码转换,我已经知道模式是什么:
<?php
if (!empty($_GET)) {
$widget = $_GET['widget'];
$output = [];
$i = 0;
$keys = array_keys($widget);
foreach ($widget as $value) {
$output[$i] = [
$keys[0] => $widget[$keys[0]][$i],
$keys[1] => $widget[$keys[1]][$i]
];
$i++;
}
echo '<pre>', print_r($output, true), '</pre>';
}
?>
输出结果为:
Array
(
[0] => Array
(
[name] => name1
[version] => version1
)
[1] => Array
(
[name] => name2
[version] => version2
)
)
如果你有任意数量的键(名称,版本,bla,blabla等等),那将会更难,但并非不可能,那么你可以遍历键,但在那个例子中我假设如果只有2个键,那就不需要了。
首先,我们提取密钥,并将它们作为密钥放在每个子数组中。然后我们用原始数组E.g中该键的值填充它们。与widget[names][0]