将多个数组合并为一个覆盖空单元格的数组


Combine multiple arrays into one overwriting empty cells

我有5个不同的数组,它们都有相同的长度(5),但这5个数组中的每一个都只有1个值和4个空白值。我该如何将5个数组合并为1(不包括空单元格):

Array
(
    [0] => 
    [1] => 5.0
    [2] => 
    [3] => 
    [4] => 
)
Array
(
    [0] => SC28
    [1] => 
    [2] => 
    [3] => 
    [4] => 
)
Array
(
    [0] => 
    [1] => 
    [2] => 
    [3] => Intel(R) Xeon(R) CPU           E5345  @ 2.33GHz
    [4] => 
)
Array
(
    [0] => 
    [1] => 
    [2] => 1999
    [3] => 
    [4] => 
)
Array
(
    [0] => 
    [1] => 
    [2] => 
    [3] => 
    [4] => VMWare
)

组合成一个数组,如下所示:

Array
(
    [0] => SC28
    [1] => 5.0
    [2] => 1999
    [3] => Intel(R) Xeon(R) CPU           E5345  @ 2.33GHz
    [4] => VMWare
)

您可以使用array_merge(或者array_replace)和array_filter:

<?php
$array1 = array('Hello', null, 'world', '');
$array2 = array(0, 0, 'Saluton', '', 'mondo');
$array3 = array();
$total = array_filter(array_merge(
    $array1, $array2, $array3)
);
print_r($total);

收益率:

Array
(
[0] => Hello
[2] => world
[6] => Saluton
[8] => mondo
)

请注意,数组已经重新编号,并且所有等价于false的值(即null、空字符串、zero、boolean false)都已删除。

如果您想保留一些值,则需要向array_filter传递一个合适的回调,该回调将仅在您提供的情况下返回false

如果要精确地将阵列滑动到一起,可以使用array_replace并单独筛选阵列

print_r(array_replace(
    array_filter(array( null, '5.0', null, null, null)),
    array_filter(array( 'SC28', null, null, null, null)),
    array_filter(array( null, null, null, 'Xeon', null))
));

这将产生:

Array
(
    [1] => 5.0
    [0] => SC28
    [3] => Xeon
)

使用ksort:

Array
(
[0] => SC28
[1] => 5.0
[3] => Xeon
)

请注意,丢失的键仍然丢失(如果您提供了所有数组,您将获得所需的结果)。但是,请注意,使用第二种方法,如果两个数组中的两个键具有相同的值,则后者将覆盖前者