PHP创建和合并多维数组

时间:2018-10-03 14:06:55

标签: php arrays

我在创建和合并多维数组时遇到了一些麻烦。 为了解释,我有一个动态的“ 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é
    )
)
)

我做错了什么?

1 个答案:

答案 0 :(得分:3)

您正在覆盖值,而不是添加到数组。尝试类似的东西:

foreach($_POST['input1'] as $language => $index){
    $inner = array();
    foreach($index as $newvalue => $index2){
        $inner[$newvalue] = $index2;
     }
     $cernegy[$language] = array('energy' => $inner);
}