2012-01-20 86 views
1

我有一個也許愚蠢的問題?我有三個數組。我想從第一個和第三個數組中獲得不同的值。我創建了下面的代碼,但返回的值是錯誤的。比較三個數組PHP的值?

function ec($str){ 
    echo $str.'<br>'; 
} 

$arr1 = array(array(
        'letter' => 'A', 
        'number' => '1' 
       ), 

       array(
        'letter' => 'B', 
        'number' => '2' 
       ), 

       array(
        'letter' => 'C', 
        'number' => '3' 
       ) 

    ); 

$arr2 = array(array(
        'letter' => 'A', 
        'number' => '1' 
       ), 

       array(
        'letter' => 'B', 
        'number' => '2' 
       ) 

    ); 



$arr3 = array(array(
        'letter' => 'D', 
        'number' => '4' 
       ), 

       array(
        'letter' => 'E', 
        'number' => '5' 
       ) 

    ); 

    $mergeArr = array_merge($arr1,$arr3); 
    foreach ($mergeArr as $kMerge => $vMerge){ 
     foreach ($arr2 as $val2){ 
      if($val2['letter'] != $mergeArr[$kMerge]['letter']){ 
       ec($mergeArr[$kMerge]['letter']); 
      } 
     } 
    } 

這段代碼的結果是:

A 
B 
C 
C 
D 
D 
E 
E 

結果我想:提前

C 
    D 
    E 

感謝。

+0

感嘆號''是不是一個句號'.' – DaveRandom

+0

的替代品。如果我讀的是正確的,你想!從3個數組中獲取所有獨特的值,消除任何重複? –

+1

所以,你想要數組1和3中的所有值不在array2中? – klennepette

回答

2

基於你正在尋找的結果,這應該這樣做:

$mergeArr = array_merge($arr1,$arr3); 

$res = array_diff_assoc($mergeArr, $arr2); 

var_dump($res); 

snippet on codepad

+3

用於鍵盤的+1,那真棒!類似的東西應該被集成到這個網站。 –

1

試試這個,而不是你的foreach的:

$diff = array_diff($mergeArr, $arr2); 

foreach($diff as $d_k => $d_v) { 
    ec($d_v['letter']); 
} 
1

如果我理解你正在嘗試做正確,這個功能應該做的工作:

function find_unique_entries() { 
    $found = $repeated = array(); 
    $args = func_get_args(); 
    $key = array_shift($args); 
    foreach ($args as $arg) { 
    if (!is_array($arg)) return FALSE; // all arguments muct be arrays 
    foreach ($arg as $inner) { 
     if (!isset($inner[$key])) continue; 
     if (!in_array($inner[$key], $found)) { 
     $found[] = $inner[$key]; 
     } else { 
     $repeated[] = $inner[$key]; 
     } 
    } 
    } 
    return array_diff($found, $repeated); 
} 

傳遞您正在搜索的關鍵第一個參數,然後在隨後的參數中儘可能多的數組。返回錯誤結果數組或錯誤。

所以你的使用習慣是:

$result = find_unique_entries('letter', $arr1, $arr2, $arr3); 

See it working