2012-01-20 58 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