如果键不存在,如何合并数组并添加空元素

Jef*_*eff 1 php arrays merge

我有这3个数组:

$a1 = array( 'a' => 1, 'b' => 2, 'c' => 3 );
$a2 = array( 'a' => 4, 'b' => 5, 'd' => 6 );
$a3 = array( 'a' => 7, 'c' => 8, 'd' => 9, 'x' => 10 );
Run Code Online (Sandbox Code Playgroud)

我想合并它们,所以结果如下:

Array(
[a] => Array(
        [0] => 1
        [1] => 4
        [2] => 7
    )
[b] => Array(
        [0] => 2
        [1] => 5
        [2] => 
    )
[c] => Array(
        [0] => 3
        [1] => 
        [2] => 8
    )
[d] => Array(
        [0] => 
        [1] => 6
        [2] => 9
    )
[x] => Array(
        [0] => 
        [1] => 
        [2] => 10
    )
Run Code Online (Sandbox Code Playgroud)

...我将在这样一个简单的表中使用数据:

  col-1 col-2  col-3
a   1     4      7
b   2     5      -
c   3     -      8
d   -     6      9
x   -     -     10
Run Code Online (Sandbox Code Playgroud)

array_merge_recursive很接近,但是没有给我空元素,所以我相信我需要一个循环来完成工作.我的问题是弄清楚我需要在该循环中使用哪个函数.

我很高兴只使用自定义用户功能合并2个数组.

Dav*_*dom 5

我认为最简单的方法是从所有输入数组中获取所有键的列表,然后迭代键列表以构造结果数组:

$keys = array_unique(
    array_merge(
        array_keys($a1),
        array_keys($a2),
        array_keys($a3)
    )
);

$result = array();
foreach ($keys as $key) {
    $result[$key] = array(
        isset($a1[$key]) ? $a1[$key] : null,
        isset($a2[$key]) ? $a2[$key] : null,
        isset($a3[$key]) ? $a3[$key] : null
    );
}

print_r($result);
Run Code Online (Sandbox Code Playgroud)

看它工作

...或者如果要提供具有任意数量输入数组的数组数组:

$keys = array();
foreach ($arrs as $arr) {
    $keys = array_merge($keys, array_keys($arr));
}
$keys = array_unique($keys);

$result = array();
foreach ($keys as $key) {
    $result[$key] = array();
    foreach ($arrs as $arr) {
        $result[$key][] = isset($arr[$key]) ? $arr[$key] : null;
    }
}

print_r($result);
Run Code Online (Sandbox Code Playgroud)

看它工作