PHP创建和合并多维数组
我在创建和合并多维数组时遇到一些问题。 试着解释一下,我有一个动态的“4输入包”。这些都是通过PHP生成的,用户可以添加更多的“4包”输入 这些输入被命名为PHP创建和合并多维数组,php,arrays,Php,Arrays,我在创建和合并多维数组时遇到一些问题。 试着解释一下,我有一个动态的“4输入包”。这些都是通过PHP生成的,用户可以添加更多的“4包”输入 这些输入被命名为input1[en]或input1[pt]。 因此,为了更好地理解一个简单的$\u POST的input1,它会打印以下数组(仍然输出input2、3和4),每个数组需要分开: Array( [en] => Array( [0] => [C][C] [1] => [L][L][C] ) [pt] =>
input1[en]
或input1[pt]
。
因此,为了更好地理解一个简单的$\u POST
的input1
,它会打印以下数组(仍然输出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'=>数组($newvalue=>$index2)
更改为'attack'=>数组($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é
)
)
)
foreach($_POST['input1'] as $language => $index){
$inner = array();
foreach($index as $newvalue => $index2){
$inner[$newvalue] = $index2;
}
$cernegy[$language] = array('energy' => $inner);
}
我用它来合并(数组名称仅为示例):
有人能给我指出两个问题的正确方向吗?
谢谢你抽出时间
编辑:第一部分现在已解决。合并两个数组仍然存在问题。
作为两个阵列的示例($array1和$array2按顺序排列):
阵列1
阵列2
Array(
[en] => Array(
[attack_name] => Array(
[0] => Tackle
[1] => RazorLeaf
)
)
[pt] => Array(
[attack_name] => Array(
[0] => Pontapé
)
)
)
当我使用$result=array\u 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é
)
)
)
我做错了什么?您正在覆盖值,而不是添加到数组中。请尝试以下操作:
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é
)
)
)
foreach($_POST['input1'] as $language => $index){
$inner = array();
foreach($index as $newvalue => $index2){
$inner[$newvalue] = $index2;
}
$cernegy[$language] = array('energy' => $inner);
}
您是否尝试过:
$cernegy[$language][['energy'=>[$newvalue=>$index2]]
?或$cernegy[$language]['energy'][[$newvalue=>$index2]
@riggsfully您的代码似乎创建了包含所有数据的数组,但我不知道这是否是创建数组的最佳方式。您可以检查一下吗?似乎键太多了。array([en]=>array([energy]=>array([0]=>array([0]=>C][C])[1]=>array([1]=>L][C]))[pt]=>array([energy]=>Array([0]=>Array([0]=>C][C]))
而且合并仍然只得到最后一个数组,不能同时合并两个数组。@smoqadam您的方法也很有效,但我更喜欢RiggsFolly的逻辑谢谢您的时间:)谢谢,但它似乎在不存在的地方创建了新的键。例如,[pt]中只有一个键
并创建两个键:Array([en]=>Array([energy]=>Array([0]=>[C][C][1]=>[L][L][C]))[pt]=>Array([energy]=>Array([0]=>[C][C][1]=>[L][C]))
@Tiago查看编辑,我错过了在donethanks一次擦除数组的机会。它解决了我的第一个问题。我已经用第二个问题(arra_merge)编辑了代码。你能检查一下吗?我已经做了。使用了array\u merge
而不是array\u merge\u recursive
,它成功了。现在我把所有的信息都放在一起了。谢谢你的时间!