我在创建和合并多维数组时遇到了一些麻烦。 为了解释,我有一个动态的“ 4个输入包”。这些是通过PHP生成的,用户可以添加更多“ 4个包”的输入。
这些输入被命名为input1[en]
或input1[pt]
。
因此,为了更好地理解$_POST
中的简单input1
,它会打印以下需要分开foreach的数组(仍然是input2,3和4):
Array(
[en] => Array(
[0] => [C][C]
[1] => [L][L][C]
)
[pt] => Array(
[0] => [C][C]
)
)
现在,我只需要创建一个包含来自输入的所有信息的数组,但是在第一次创建数组(来自input1)时就遇到了麻烦。
使用代码:
foreach($_POST['input1'] as $language => $index){
foreach($index as $newvalue => $index2){
$cernegy[$language] = array(
'energy' => array($newvalue => $index2)
);
}
}
输出为:
Array(
[en] => Array(
[energy] => Array(
[1] => [L][L][C]
)
) [pt] => Array(
[energy] => Array(
[0] => [C][C]
)
)
)
如您所见,它错过了[en]中的键[0]。 其他输入也一样(只有在同一种语言存在多个输入时,才在数组中保留最后一个键(在本例中为[en]))
我的foreach都相等,但是将'energy' => array($newvalue => $index2)
更改为'attack' => array($newvalue => $index2)
,依此类推...
然后,第二个问题是合并数组。如果我合并两个数组(即使信息错误),也只会保留最后一个合并的数组。
基本上,如果我合并array1
(生成'energy'
与array2
(生成'attack'
),则仅保留来自array2
的信息,例如:
Array(
[en] => Array(
[attack_name] => Array(
[1] => RazorLeaf
)
)
[pt] => Array(
[attack_name] => Array(
[0] => Pontapé
)
)
)
应该是这样的:
Array(
[en] => Array(
[energy] => Array(
[1] => [L][L][C]
)
[attack_name] => Array(
[1] => RazorLeaf
)
)
[pt] => Array(
[energy] => Array(
[0] => [C][C]
)
[attack_name] => Array(
[0] => Pontapé
)
)
)
我用它来合并(数组名称仅是示例):
$result = array_merge($array1, $array2);
有人在两个问题上都可以为我指明正确的方向吗? 感谢您的宝贵时间。
编辑:第一部分现已解决。现在问题仍然在于合并两个阵列。 作为两个数组的示例(顺序为$ array1和$ array2): Array1
Array(
[en] => Array(
[energy] => Array(
[0] => [C][C]
[1] => [L][L][C]
)
)
[pt] => Array(
[energy] => Array(
[0] => [C][C]
)
)
)
Array2
Array(
[en] => Array(
[attack_name] => Array(
[0] => Tackle
[1] => RazorLeaf
)
)
[pt] => Array(
[attack_name] => Array(
[0] => Pontapé
)
)
)
当我使用$result = array_merge($array1, $array2);
时,我期望得到:
Array(
[en] => Array(
[energy] => Array(
[0] => [C][C]
[1] => [L][L][C]
)
[attack_name] => Array(
[0] => Tackle
[1] => RazorLeaf
)
)
[pt] => Array(
[energy] => Array(
[0] => [C][C]
)
[attack_name] => Array(
[0] => Pontapé
)
)
)
但是我只得到$array2
信息的输出:
Array(
[en] => Array(
[attack_name] => Array(
[0] => Tackle
[1] => RazorLeaf
)
)
[pt] => Array(
[attack_name] => Array(
[0] => Pontapé
)
)
)
我做错了什么?
答案 0 :(得分:3)
您正在覆盖值,而不是添加到数组。尝试类似的东西:
foreach($_POST['input1'] as $language => $index){
$inner = array();
foreach($index as $newvalue => $index2){
$inner[$newvalue] = $index2;
}
$cernegy[$language] = array('energy' => $inner);
}