通过比较整行找出两个二维数组之间的差异[重复]

问题描述 投票:0回答:6

--$arr1----

Array
    (
        [0] => Array
            (
                [id] => 1
                [Name] => AAA
            )

        [1] => Array
            (
                [id] => 6
                [Name] => BBB
            )

    )

--$arr2---

Array
(
    [0] => Array
        (
            [id] => 1
            [Name] => AAA
        )

    [1] => Array
        (
            [id] => 6
            [Name] => BBB
        )

    [2] => Array
        (
            [id] => 46
            [Name] => CCC
        )

)

我想要的最终结果如下。有谁可以帮助我吗?

--最终结果--

Array
(
    [0] => Array
        (
            [id] => 46
            [Name] => CCC
        )

)

更新---

在这种情况下,array_diff($arr1,$arr2)的结果为空

php arrays multidimensional-array filter array-difference
6个回答
4
投票

最简单的方法是 Mark Baker 的解决方案,或者只需编写自己的简单函数:

代码:

function arrdiff($a1, $a2) {
  $res = array();
  foreach($a2 as $a) if (array_search($a, $a1) === false) $res[] = $a;
  return $res;
  }

print_r(arrdiff($arr1, $arr2));

输出:

Array
(
  [0] => Array
    (
      [id] => 46
      [name] => CCC
    )
)

3
投票
$arr1 = array(array('id' => 1,  'Name' => 'AAA'),
              array('id' => 6,  'Name' => 'BBB')
             );

$arr2 = array(array('id' => 1,  'Name' => 'AAA'),
              array('id' => 6,  'Name' => 'BBB'),
              array('id' => 46, 'Name' => 'CCC')
             );
$results = array_diff(array_map('serialize',$arr2),array_map('serialize',$arr1));
$results = array_map('unserialize',$results);

var_dump($results);

编辑

为了纯粹的乐趣,您可以使用 array_filter() 而不是 array_diff() - 这意味着根本不需要序列化任何东西

$results = array_filter($arr2, function ($value) use($arr1) { return !in_array($value,$arr1); } );

var_dump($results);

1
投票

你应该使用

array_diff()

$finalResult = array_diff($arr2, $arr1);

如果您需要更复杂的比较,您还可以构建 foreach 循环并像这样使用:

function compareItems( $a, $b){
    return $a['id'] == $b['id']; // Example compare criteria
}

$result = array();
foreach( $arr1 as $item){
    foreach( $arr2 as $key => $it){
        if( !compareItems( $item, $it)){
             $result[] = $it; // Either build new array
             unset( $arr2[$key]); // Or remove items from original array
             break;
        }
    }
}

而且您可能希望以相反的顺序

$arr1
$arr2
来实现相同的功能。


0
投票

你可以用 array_udiff() 来解决这个问题

function arr_comp($a, $b)
{
   if ($a['id'] == $b['id'])
       return 0;
   else if ($a['id'] > $b['id'])
       return 1;
   else
       return -1;
}

$result = array_udiff($arr2, $arr1, 'arr_comp');

或者如果您不知道哪个数组中可能存在差异,您可以尝试:

$res1 = array_udiff($arr1, $arr2, 'arr_comp');
$res2 = array_udiff($arr2, $arr1, 'arr_comp');
$result = array_merge($res1, $res2);

0
投票
$arrDif=array();

$i=0;
foreach($arr1 as $value)
{
    if(!in_array($value, $arr2))
    {
        $arrDif[$i]=$value;
        $i++;
    }
}

-1
投票

看一下 PHP 内置函数 array_diff。这会对你有所帮助:-) 只需传递两个数组,并存储 array_diff() 返回的数组,其中将包含两个数组之间的差异。

当您使用多维数组时,请查看 PHP 网站上的注释:http://www.php.net/manual/en/function.array-diff.php#98680.

© www.soinside.com 2019 - 2024. All rights reserved.