PHP 唯一地合并数组


PHP merging arrays uniquely

所以我正在开发一个结合了四个数组的小型php应用程序。现在,某些可能的数组可能为空。我尝试了以下解决方案来唯一地合并四个数组。

<?php
$a = [1,2,3,4,5];
$b = null;
$c = [5,4,3,2,1];
$d = [1,2];
$new_array;
if(is_array($a) && is_array($b) && is_array($c) && is_array($d))
{
    $new_array =  array_unique(array_merge($a,$b,$c,$d));
}else if(is_array($a) && is_array($b) && is_array($c))
{
        $new_array =  array_unique(array_merge($a,$b,$c));
}else if(is_array($a) && is_array($b))
{   
    $new_array =  array_unique(array_merge($a,$b));
}else{
    $new_array = $a;
}
print_r($new_array);
?>

我很快意识到我的代码功能非常失调,因为它不能满足所有可能的数组组合,同时排除空变量。

我该如何解决这个问题。确保合并所有数组变量,丢弃非数组变量。谢谢

这个

怎么样? 将所有数组放在一个数组中,这样您就可以轻松地遍历它们,并使用custom in_array()函数检查它们是否已经存在?

这种方式的好处是它不会将脚本限制为只有四个数组,因为它将遍历您聚集在一起的所有数组。

$a = [1,2,3,4,5];
$b = null;
$c = [5,4,3,2,1];
$d = [1,2];
$array_stack = array($a, $b, $c, $d);
$new_array = array();
foreach($array_stack as $stack){
    if(!is_array($stack)) continue;
    foreach($stack as $value){
        if(!in_array($value, $new_array)) $new_array[] = $value;
    }
}
print_r($new_array);

可能是这样的:

<?php
$a = [1,2,3,4,5];
$b = null;
$c = [5,4,3,2,1];
$d = [1,2];
$new_array;
if(is_array($a)) $new_array = $a;
if(is_array($b)) $new_array =  array_unique(array_merge($new_array,$b));
if(is_array($c)) $new_array =  array_unique(array_merge($new_array,$c));
if(is_array($d)) $new_array =  array_unique(array_merge($new_array,$d));
?>

老问题,但无论如何都要给出我的意见。更通用的方法:

function multiple_array_merge() {
    $args = func_get_args();
    $array = [];
    foreach ($args as $i) {
        if (is_array($i)) $array = array_merge($array, $i);
    }
    return array_unique($array);
}
$a = [1, 2, 3, 4, 5];
$b = null;
$c = [5, 4, 3, 2, 1];
$d = [1, 2];
$merged = multiple_array_merge($a, $b, $c, $d);