2013-09-30 73 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);