2012-01-20 7 views
1

私は多分愚かな質問がありますか?3つの配列PHPの値を比較しますか?

私は3つの配列を持っています。そして、私は最初と3番目の配列から異なる値を取得したい。次のコードを作成しましたが、戻り値が間違っています。

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

は、あなたが検索しているキーを渡します最初の引数、その後の引数で好きなだけ多くの配列を返します。結果の配列を返します。エラーの場合はFALSEを返します。

は、だからあなたの用法・ラインは次のようになります。

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

See it working

関連する問題