qhdtc5 2017-03-27 21:28:18 1844次浏览 0条回复 0 0 0

大家知道,array_diff()只支持一维数组的计算,二维数组如何计算差集呢?

例如这两个数组:

$array1 = [
  0 => [
    'id' => 1,
    'name' => 'abc',
  ]
];
$array2 = [
  0 => [
    'id' => 1,
    'name' => 'abc',
  ],
  1 => [
    'id' => 2,
    'name' => 'test',
  ]
];

我的思路是降低维度(从网上搜索的大部分思路也是降低维度),然后计算。

在这里我使用了一个笨方法,转换为json字符串:

function my_array_diff_multi($arr1, $arr2)
{
  $tmp1 = [];
  foreach ($arr1 as $a1) {
    $tmp1[] = json_encode($a1);
  }
  $tmp2 = [];
  foreach ($arr2 as $a2) {
    $tmp2[] = json_encode($a2);
  }
  $result = [];
  foreach (array_diff($tmp1, $tmp2) as $tmp3) {
    $result[] = json_decode($tmp3, true);
  }
}

print_r(my_array_diff_multi($array1, $array2))
// 输出
// Array ( [0] => Array ( [id] => 2 [name] => test ) )
    没有找到数据。
您需要登录后才可以回复。登录 | 立即注册