我有两个表格
的数组 Array1:
[0]=> Array([name] => foo [id] => 12)
[1]=> Array([name] => bar [id] => 34)
Array2:
[0]=>Array([name] => bar [id]=> 34)
[1]=>Array([name] => baz [id]=> 56)
数组来自数据库,任何两对都可以具有相同的名称,但ID是唯一的。我试图通过ID比较数组,所以:
$one_not_two = array_diff($array1[id], $array2[id]);
但这不会返回任何东西。我也试过了
$one_not_two = array_diff($array1[id], $array2[id]);
返回错误“参数不是数组”。最初我通过将ID提取到一维数组中来解决这些问题,然后比较这些,但现在一个新功能需要我比较这些对。有什么建议吗?
PS我们的服务器正在运行php 5.3,如果这有任何区别。
答案 0 :(得分:3)
因为数组是多维的,你必须像这样提取id:
$ids1 = array();
foreach($array1 as $elem1)
$ids1[] = $elem1['id'];
$ids2 = array();
foreach($array2 as $elem2)
$ids2[] = $elem2['id'];
$one_not_two = array_diff($ids1,$ids2);
有关您的具体问题,请查看array_diff() with multidimensional arrays
答案 1 :(得分:0)
您可以使用array_udiff创建自定义差异功能:
$diff = array_udiff($array1,
$array2,
function ($a, $b){
if($a['id'] == $b['id']){
return 0;
} else {
return ($a['id'] < $b['id'] ? -1 : 1);
}
}
);
答案 2 :(得分:0)
如果id是唯一的,你可以这样做:
$one_not_two = array();
foreach ($array1 as $val) {
$one_not_two[$val['id']] = $val;
}
foreach ($array1 as $val) {
if (!isset($one_not_two[$val['id']])) {
$one_not_two[$val['id']] = $val;
}
答案 3 :(得分:0)
最后,我通过将Array1更改为name => id
答案 4 :(得分:0)