3
Array 1 ($allmodels)
Array ( [0] => Array ( [id] => 6 ) 
        [1] => Array ( [id] => 7 ) 
        [2] => Array ( [id] => 8 ) ) 

Array 2 ($existmodels)
Array ( [0] => Array ( [id] => 6 ) 
        [1] => Array ( [id] => 4 ) 
        [2] => Array ( [id] => 7 ) 
        [3] => Array ( [id] => 5 ) )

我想要的输出数组是(使用 $allmodels - $existmodels 获取剩余模型)

Array ( [0] => Array ( [id] => 8 ))

我试过了

array_diff($allmodels,$existmodels);ANDarray_diff_assoc($allmodels,$existmodels);两者都导致

大批 ( )

谁能告诉我如何完成它?

4

3 回答 3

2

array_diff不适用于多维数组。您必须打开并重新包装您的 id:

$diff = array_map(function ($i) { return array('id' => $i); },
                  array_diff(array_map(function ($i) { return $i['id']; }, $array1),
                             array_map(function ($i) { return $i['id']; }, $array2)));

或将它们设置为很容易区分的键:

$diff = array_diff_key(array_combine(array_map(function ($i) { return $i['id']; }, $array1), $array1),
                       array_combine(array_map(function ($i) { return $i['id']; }, $array2), $array2));
于 2012-10-09T05:33:10.773 回答
2

array_diff 的注意事项:

当且仅当 (string) $elem1 === (string) $elem2 时,才认为两个元素相等。换句话说:当字符串表示相同时。

数组的字符串表示是 both Array,所以这就是你得到空数组的原因。

您可以改用array_filter

var_dump(array_filter($allmodels, function ($var) use ($existmodels) {
  return !in_array($var, $existmodels);
}));
于 2012-10-09T05:36:06.900 回答
1

尝试这个

$array1 = array( 0 =>array('id'=>1), 1=> array('id'=>2));
$array2 = array( 0 =>array('id'=>3), 1=> array('id'=>2));
$diff = array();

foreach($array1 as $value1)
{

  foreach($array2 as $value2)
  {
    if($value1['id'] == $value2['id'])
    continue 2;
  }

  $diff[] = $value1;
}
echo nl2br(print_r($diff,1));
于 2012-10-09T05:36:23.557 回答