Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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_Multidimensional Array - Fatal编程技术网

Php 用缺少的键填充多维数组

Php 用缺少的键填充多维数组,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有以下多维数组。我必须以看起来的方式创建关键点,以便对它们进行相应的分组 Array ( [Oranges] => Array ( [Name] => Oranges [l.VA123] => 17 [l.MA123] => 12 [l.GA123] => 9 [l.CT123] => 5 )

我有以下多维数组。我必须以看起来的方式创建关键点,以便对它们进行相应的分组

Array
(
    [Oranges] => Array
        (
            [Name] => Oranges
            [l.VA123] => 17
            [l.MA123] => 12
            [l.GA123] => 9
            [l.CT123] => 5
        )

    [Apple] => Array
        (
            [Name] => Apple
            [l.CA123] => 13
        )

    [Grapes] => Array
        (
            [Name] => Grapes
            [l.WI123] => 8
            [l.FL123] => 5
        )
)
但是,我需要所有子阵列具有相同的键。缺少的值应填充为0。最后一个数组应该如下所示,以便所有子数组具有相同的长度

    Array
(
    [Oranges] => Array
        (
            [Name] => Oranges
            [l.VA123] => 17
            [l.MA123] => 12
            [l.GA123] => 9
            [l.CT123] => 5
            [l.CA123] => 0
            [l.WI123] => 0
            [l.FL123] => 0
        )

    [Apple] => Array
        (
            [Name] => Apple
            [l.CA123] => 13
            [l.WI123] => 0
            [l.FL123] => 0
            [l.VA123] => 0
            [l.MA123] => 0
            [l.GA123] => 0
            [l.CT123] => 0
        )

    [Grapes] => Array
        (
            [Name] => Grapes
            [l.WI123] => 8
            [l.FL123] => 5
            [l.CA123] => 0
            [l.VA123] => 0
            [l.MA123] => 0
            [l.GA123] => 0
            [l.CT123] => 0
        )
)
您需要一个简单的+运算符。自:

+运算符返回附加到左侧数组的右侧数组;对于两个数组中都存在的键,将使用左侧数组中的元素,而忽略右侧数组中的匹配元素


也许有人能想出更有效的方法,但如果没有您想要的密钥列表,我认为您需要对数组进行几次遍历:

<?php
$fruits = [
    "Oranges"=>["Name"=>"Oranges", "l.VA123"=>17, "l.MA123"=>12, "1.GA123"=>9, "1.CT123"=>5],
    "Apple"=>["Name"=>"Apple", "1.CA123"=>13],
    "Grapes"=>["Name"=>"Grapes", "1.WI123"=>8, "1.FL123"=>5]
];
$keys = [];
foreach ($fruits as $fruit) {
    unset($fruit["Name"]);
    $keys = array_merge($keys, array_keys($fruit));
}
$keys = array_fill_keys(array_unique($keys), 0);

foreach ($fruits as &$fruit) {
    $fruit = array_merge($keys, $fruit);
}
print_r($fruits);

子数组中的名称或基因键?我更新了Q。它不是名称。新数组需要有值为0I的缺失键,将键从Gene改为Name,但这并不重要。我的答案不变。谢谢你的回答。我不想手动创建新密钥。有没有一种方法可以从多维数组创建列表键?还添加了一种简单的方法,它不需要太多注释,就在第一个警告块之前谢谢你miken。这很有帮助。
<?php
$fruits = [
    "Oranges"=>["Name"=>"Oranges", "l.VA123"=>17, "l.MA123"=>12, "1.GA123"=>9, "1.CT123"=>5],
    "Apple"=>["Name"=>"Apple", "1.CA123"=>13],
    "Grapes"=>["Name"=>"Grapes", "1.WI123"=>8, "1.FL123"=>5]
];
$keys = [];
foreach ($fruits as $fruit) {
    unset($fruit["Name"]);
    $keys = array_merge($keys, array_keys($fruit));
}
$keys = array_fill_keys(array_unique($keys), 0);

foreach ($fruits as &$fruit) {
    $fruit = array_merge($keys, $fruit);
}
print_r($fruits);