2012-07-07 61 views
-4

PHP中是否有任何函數會給出來自兩個或多個數組的非常見值的數組?從兩個或多個數組中獲取不常見的值

例如:

$array1 = array("green", "red", "blue"); 
$array2 = array("green", "yellow", "red"); 
.... 
$result = Function_Needed($array1, $array2,...); 
print_r($result); 

應該給輸出:

array("blue", "yellow", ...); 

回答

6

使用array_diffarray_merge

$result = array_merge(array_diff($array1, $array2), array_diff($array2, $array1)); 

Here's a demo.

對於多個陣列,回調和array_reduce結合起來:

function unique(&$a, $b) { 
    return $a ? array_merge(array_diff($a, $b), array_diff($b, $a)) : $b; 
} 

$arrays = array(
    array('green', 'red', 'blue'), 
    array('green', 'yellow', 'red') 
); 

$result = array_reduce($arrays, 'unique'); 

And here's a demo of that.

+0

@ShehzadBilal:減少;即取'$ array1'和'$ array2'並執行這個操作,然後重複結果和'$ array3',依此類推。 – Ryan 2012-07-07 01:28:52

+7

@ShehzadBilal你應該對那些正在竭盡全力幫助你的人產生更多讚賞,而不是粗暴地發佈「不正確」或「不完整」 – Austin 2012-07-07 01:32:15

+4

@ShehzadBilal:在這裏,我已經爲* n *數組添加了一個示例。 (是的,請稍微有禮貌。) – Ryan 2012-07-07 01:40:08

2
$result = array_diff($array1, $array2) + array_diff($array2, $array1); 
+0

順便說一下,您可能想調用'array_values'來使按鍵恢復正常。 – Ryan 2012-07-07 01:28:29

+3

@ShehzadBilal C'mom ...曾經聽說過「foreach」或「for」嗎?你應該在問題中提及;) – KingCrunch 2012-07-07 01:36:16

0

這應該這樣做。它可以擴展到使用兩個以上的數組。它基本上計算公共密鑰出現,並返回那些具有一個計數:

$a = array('yellow', 'blue', 'red', 'green'); 
$b = array('blue', 'purple', 'green'); 

function unintersect($a, $b) 
{ 
    $x = array_fill_keys($a, 1); 
    foreach ($b as $v) { 
    $x[$v]++; // this might trigger warning 
    } 
    return array_keys(array_filter($x, function($v) { 
    return $v === 1; 
    })); 
} 

print_r(unintersect($a, $b)); 

返回:

Array 
(
    [0] => yellow 
    [1] => red 
    [2] => purple 
)