2013-09-30 74 views
2

所以我正在合并四个数组的小型PHP应用程序。 现在有可能会有一些可能的数组为空。 我试过以下解决方案来合并四个数组。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); 
?> 

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

我该如何解决这个问题。确保所有的数组变量都被合并,并且不合格的变量被丢弃。 感谢

+0

http://stackoverflow.com/questions/4660675/php-array-merge-array-unique –

回答

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)); 
?> 
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); 
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);