这是一个数组
Array ( [0] => 1 [1] => 2 )
关联数组是
Array ( [0] => Array ( [id_1] => 3 [id_2] => 1 ) [1] => Array ( [id_3] => 5 [id_4] => 3 ) )
我想比较这些数组并获得一个包含关联数组中不存在的值的数组
结果应该是array(3)和array(5,3)
答案 0 :(得分:3)
$array1 = array(1,2);
$array2 = array(
array(
'id_1' => 3,
'id_2' => 1
),
array(
'id_3' => 5,
'id_4' => 3,
)
);
我不确定我是否理解这个问题,如果你想分别比较每个数组:
foreach($array2 as $subarray) {
var_dump(array_diff($subarray, $array1));
}
返回:
array
'id_1' => int 3
array
'id_3' => int 5
'id_4' => int 3
否则,如果你不想循环并展平数组(使用array_flatten函数来自php doc的array_values注释)
http://www.php.net/manual/en/function.array-values.php#97715
function array_flatten($a,$f=array()){
if(!$a||!is_array($a))return '';
foreach($a as $k=>$v){
if(is_array($v))$f=array_flatten($v,$f);
else $f[$k]=$v;
}
return $f;
}
var_dump(
array_unique(
array_diff(
array_flatten($array2), $array1
)
)
);
返回:
array
'id_1' => int 3
'id_3' => int 5
'id_4'未显示,因为它没有唯一值。您可以使用array_values()
删除密钥,也可以通过从代码中删除array_unique()
来保留“id_4”。
答案 1 :(得分:2)
这样的事,也许?
$array_a = array(1, 2);
$array_b = array(array(1, 3), array(3, 1));
$result = array();
foreach($array_b as $key => $sub_array_b){
foreach($sub_array_b as $sub_key => $value){
if(!in_array($value, $array_a) && !in_array($value, $result)) array_push($result, $value);
}
}
编辑:我在编辑你的问题之前输入了这个。您仍然可以修改上面的代码,以便为关联数组中的每个子数组创建不同的数组。