2

所以我正在开发一个结合了四个数组的小型 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);
?>

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

我该如何解决这个问题。确保所有属于数组的变量都被合并,而那些不是数组的则被丢弃。谢谢

4

3 回答 3

5

这个怎么样?将所有数组放在一个数组中,这样您就可以轻松地遍历它们,并使用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);
于 2013-09-30T07:36:31.793 回答
3

也许是这样的:

<?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));
?>
于 2013-09-30T07:32:20.197 回答
0

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

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);
于 2015-09-25T15:09:30.403 回答