繁体   English   中英

PHP创建和合并多维数组

[英]PHP creating and merging multidimensional arrays

我在创建和合并多维数组时遇到了一些麻烦。 试着解释一下,我有一个动态的“4包输入”。 这些是通过PHP生成的,用户可以添加更多“4包”输入。

这些输入命名为input1[en]input1[pt] 因此,为了更好地理解input1的简单$_POST ,它打印出需要分离的foreach的以下数组(仍然是输出2,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 (与array2生成'energy' (生成'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é
    )
)
)

我做错了什么?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM