【问题标题】:Compare values from three arrays PHP?比较三个数组PHP的值?
【发布时间】:2012-01-20 14:22:08
【问题描述】:

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

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

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 个数组中获取所有唯一值,消除任何重复项?
  • 那么,您想要数组 1 和 3 中所有不在数组 2 中的值吗?
  • 不,我想合并第一个和第三个数组,这个结果将与第二个数组进行比较。
  • klennepette 是的。我想从 1 和 3 中获取所有不在 arr2 中的值。

标签: php arrays multidimensional-array compare


【解决方案1】:

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

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

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

var_dump($res);

请参阅snippet on codepad

【讨论】:

  • +1 用于键盘,太棒了!类似的东西应该被整合到这个网站中。
【解决方案2】:

试试这个,而不是你的 foreach:

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

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

【讨论】:

    【解决方案3】:

    如果我理解您要正确执行的操作,则此功能应该可以完成工作:

    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

    【讨论】:

      猜你喜欢
      • 2017-04-26
      • 2011-12-03
      • 1970-01-01
      • 1970-01-01
      • 2019-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多