2011-02-17 87 views
1

這是一個陣列比較關聯數組和陣列

Array ([0] => 1 [1] => 2) 

關聯數組是

Array ([0] => Array ([id_1] => 3 [id_2] => 1) [1] => Array ([id_3] => 5 [id_4] => 3)) 

我想比較這些陣列和得到包含不存在於關聯的值的數組array

結果應該是array(3)和array(5,3)

+0

這個例子應該是什麼結果? `陣列(3)`? – deceze 2011-02-17 04:28:14

回答

2

something li可能呢?

$array_a = array(1, 2); 
$array_b = array(array(1, 3), array(3, 1)); 

$result = array(); 

foreach($array_b as $key => $sub_array_b){ 
    foreach($sub_array_b as $sub_key => $value){ 
     if(!in_array($value, $array_a) && !in_array($value, $result)) array_push($result, $value);   
    } 
} 

編輯:我在編輯你的問題之前輸入了這個。您仍然可以修改上面的代碼,以便爲關聯數組中的每個子數組創建一個不同的數組。

3
$array1 = array(1,2); 

$array2 = array(
    array(
     'id_1' => 3, 
     'id_2' => 1 
    ), 
    array(
     'id_3' => 5, 
     'id_4' => 3, 
    ) 
); 

我不知道如果我理解這個問題,如果你想每個陣列單獨比較:

foreach($array2 as $subarray) { 
    var_dump(array_diff($subarray, $array1)); 
} 

回報:

array 
    'id_1' => int 3 
array 
    'id_3' => int 5 
    'id_4' => int 3 

否則,如果你不想循環並壓平數組(使用來自array_values的php doc註釋中的array_flatten函數)

http://www.php.net/manual/en/function.array-values.php#97715

function array_flatten($a,$f=array()){ 
    if(!$a||!is_array($a))return ''; 
    foreach($a as $k=>$v){ 
     if(is_array($v))$f=array_flatten($v,$f); 
     else $f[$k]=$v; 
    } 
    return $f; 
} 


var_dump(
    array_unique(
     array_diff(
      array_flatten($array2), $array1 
     ) 
    ) 
); 

回報:

array 
    'id_1' => int 3 
    'id_3' => int 5 

'ID_4' 沒有顯示,因爲它不具有獨特的價值。您可以使用array_values()刪除密鑰,也可以通過從代碼中刪除array_unique()來保留'id_4'。