首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较三个数组PHP的值?

比较三个数组PHP的值?
EN

Stack Overflow用户
提问于 2012-01-20 22:22:08
回答 3查看 2.4K关注 0票数 1

我有个也许很愚蠢的问题?

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

代码语言:javascript
复制
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']);
            }
        }
    }

这段代码的结果是:

代码语言:javascript
复制
A
B
C
C
D
D
E
E

我想要的结果是:

代码语言:javascript
复制
    C
    D
    E

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-20 22:31:17

根据您正在查找的结果,应该可以这样做:

代码语言:javascript
复制
$mergeArr = array_merge($arr1,$arr3);

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

var_dump($res);

请参阅snippet on codepad

票数 2
EN

Stack Overflow用户

发布于 2012-01-20 22:37:31

试试这个而不是你的foreach:

代码语言:javascript
复制
 $diff = array_diff($mergeArr, $arr2);

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

Stack Overflow用户

发布于 2012-01-20 22:38:34

如果我理解正确的话,这个函数应该可以完成以下工作:

代码语言:javascript
复制
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。

所以你的使用行应该是:

代码语言:javascript
复制
$result = find_unique_entries('letter', $arr1, $arr2, $arr3);

See it working

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8942793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档