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);
和array_diff_assoc($allmodels,$existmodels);
都会产生
Array()
有谁能告诉我怎么能完成它?
答案 0 :(得分: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));
答案 1 :(得分:2)
array_diff注意事项:
当且仅当(字符串)$ elem1 ===时,才认为两个元素相等 (字符串)$ elem2。用文字表示:当字符串表示相同时。
数组的字符串表示形式都是Array
,所以这就是为什么你得到空数组的原因。
您可以改用array_filter。
var_dump(array_filter($allmodels, function ($var) use ($existmodels) {
return !in_array($var, $existmodels);
}));
答案 2 :(得分: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));