我有像这样的多维数组
Array
(
[0] => Array
(
['key-A'] => 'val1'
['key-B'] => 'val2'
)
[1] => Array
(
['key-A'] => 'val3'
['key-C'] => 'val4'
)
[2] => Array
(
['key-B'] => 'val5'
['key-C'] => 'val6'
)
)
如何将其更改为标准化的多维数组,以便所有键都存在,如果键不存在则输入空值?
例如
Array
(
[0] => Array
(
['key-A'] => 'val1'
['key-B'] => 'val2'
['key-C'] => null
)
[1] => Array
(
['key-A'] => 'val3'
['key-B'] => null
['key-C'] => 'val4'
)
[2] => Array
(
['key-A'] => null
['key-B'] => 'val5'
['key-C'] => 'val6'
)
)
答案 0 :(得分:2)
<?php
$arrays = [
[
'key-A' => 'val1',
'key-B' => 'val2',
],
[
'key-A' => 'val3',
'key-C' => 'val4',
],
[
'key-B' => 'val5',
'key-C' => 'val6',
],
];
// First build up a single array containing all the keys present
$allKeys = [];
foreach ($arrays as $array)
{
$allKeys = array_unique(array_merge(array_keys($array), $allKeys));
}
// Then loop over the original array, merging the existing values into an array
// containing all the known keys
foreach ($arrays as &$array)
{
$array = array_merge(array_combine(
$allKeys,
array_fill(0, count($allKeys), null)
), $array);
}
print_r($arrays);
答案 1 :(得分:1)
<?php
$input_array = [
[
"foo" => 1,
"bar" => 2
],
[
"baq" => 3,
"baz" => 4
]
];
$unique = [];
foreach ($input_array as $row){
foreach ($row as $k => $v){
$unique[$k] = true;
}
}
foreach ($input_array as $iak => $row){
foreach ($unique as $k => $v){
if (!isset($row[$k])){
$input_array[$iak][$k] = null;
}
}
}
var_dump($input_array);
答案 2 :(得分:0)
你可以使用php [array_fill] [1]
[1]:http://php.net/manual/en/function.array-fill.php功能
$arr = array_fill(0, num_of_items_you_need, array(
'A' => null,
'B' => null,
'C' => null
)
);
//now you have null as default
答案 3 :(得分:0)
尝试使用数组键存在函数
<?php
$ss= Array
(
'0' => Array
(
'key-A' => 'val1',
'key-B' => 'val2'
),
'1' => Array
(
'key-A' => 'val3',
'key-C' => 'val4'
),
'2' => Array
(
'key-B' => 'val5',
'key-C' => 'val6'
)
);
print_r($ss);
foreach($ss as $key=>$row)
{
if(!array_key_exists('key-A',$row))
{
$ss[$key]['key-A']='null';
}
if(!array_key_exists('key-B',$row))
{
$ss[$key]['key-B']='null';
}
if(!array_key_exists('key-C',$row))
{
$ss[$key]['key-C']='null';
}
}
echo "<PRE>";
print_r($ss);
答案 4 :(得分:0)
试试此代码
$ss= Array
(
'0' => Array
(
'key-A' => 'val1',
'key-B' => 'val2'
),
'1' => Array
(
'key-A' => 'val3',
'key-C' => 'val4'
),
'2' => Array
(
'key-B' => 'val5',
'key-C' => 'val6'
)
);
$key = array("A","B","C");
$var = array();
foreach($ss as $k => $v)
{
foreach($key as $v2)
{
$var[$k]["key-{$v2}"] = isset($v["key-{$v2}"]) ? $v["key-{$v2}"] : "null";
}
}
print_r($var);
您会得到以下结果:
Array
(
[0] => Array
(
[key-A] => val1
[key-B] => val2
[key-C] => null
)
[1] => Array
(
[key-A] => val3
[key-B] => null
[key-C] => val4
)
[2] => Array
(
[key-A] => null
[key-B] => val5
[key-C] => val6
)
)
答案 5 :(得分:-1)
decode_packet