比较PHP三个数组的值?

时间:2012-01-20 14:22:08

标签: php arrays multidimensional-array compare

我有一个可能很愚蠢的问题?

我有三个阵列。我希望从第一个和第三个数组中获得不同的值。我创建了以下代码,但返回的值是错误的。

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

提前致谢。

3 个答案:

答案 0 :(得分:2)

根据您要查找的结果,应该这样做:

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

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

var_dump($res);

请参阅snippet on codepad

答案 1 :(得分:1)

试试这个而不是你的foreach:

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

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

答案 2 :(得分: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