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);