无法递归规范化 widget[name][]
Can't recursively normalize widget[name][]
考虑这个简单的形式:
<?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
)
)
)
所以,我一直在尝试实现一种算法,该算法会递归地变成这样,但我失败了很多次。
所以我放弃了,需要你们从不同的角度看待这个问题。有什么想法吗?
能不能改一下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 个键,则不需要。
首先我们提取键,并将它们作为键放在每个子数组中。然后我们用原始数组中那个位置上那个键的值填充它们,例如widget[names][0]
考虑这个简单的形式:
<?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
)
)
)
所以,我一直在尝试实现一种算法,该算法会递归地变成这样,但我失败了很多次。 所以我放弃了,需要你们从不同的角度看待这个问题。有什么想法吗?
能不能改一下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 个键,则不需要。
首先我们提取键,并将它们作为键放在每个子数组中。然后我们用原始数组中那个位置上那个键的值填充它们,例如widget[names][0]