Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP创建和合并多维数组_Php_Arrays - Fatal编程技术网

PHP创建和合并多维数组

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] =>

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

这些输入被命名为
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
,它成功了。现在我把所有的信息都放在一起了。谢谢你的时间!