我有2个数组,如下所示。如果array2
拥有array1
,我想从stu_id
中删除数据。 final数组应该像result_array
。
$array1 = Array
(
[0] => Array
(
[stu_id] => 1
[name] => mr.a
)
[1] => Array
(
[stu_id] => 3
[name] => mr.b
)
)
$array2 = Array
(
[0] => Array
(
[id] => 1
[stu_id] => 1
[data] => abc
)
[1] => Array
(
[id] => 2
[stu_id] => 2
[data] => xyz
)
[3] => Array
(
[id] => 3
[stu_id] => 3
[data] => aaa
)
)
$result_array = Array
(
[0] => Array
(
[id] => 2
[stu_id] => 2
[data] => xyz
)
)
我试过了array_diff,$result_array = array_diff($array2, $array1);
但它没有用。
请帮我这样做。
答案 0 :(得分:3)
使用array_column()
stud_id
临时分配密钥(NULL
保留完整的子数组数据),然后使用array_diff_key()
进行过滤,array_values()
重置密钥键:
代码:(Demo)
$array1=[
['stu_id'=>1,'name'=>'mr.a'],
['stu_id'=>3,'name'=>'mr.b']
];
$array2=[
['id'=>1,'stu_id'=>1,'data'=>'abc'],
['id'=>2,'stu_id'=>2,'data'=>'xyz'],
['id'=>3,'stu_id'=>3,'data'=>'aaa']
];
//var_export(array_column($array1,NULL,'stu_id'));
//var_export(array_column($array2,NULL,'stu_id'));
var_export(array_values(array_diff_key(array_column($array2,NULL,'stu_id'),array_column($array1,NULL,'stu_id'))));
输出:
array (
0 =>
array (
'id' => 2,
'stu_id' => 2,
'data' => 'xyz',
),
)
如果您想使用foreach循环结构,请从stu_id
生成$array1
的过滤数组,并对{{1}的每次迭代写一个条件检查}}。此方法不会修改原始数组,因此可以重复使用"向下脚本"。
代码:
$array2
答案 1 :(得分:1)
foreach($array1 as $data1){
foreach($array2 as $k => $data2){
if($data2["stu_id"] == $data1["stu_id"]){
unset($array2[$k]);
break;
}
}
}
$result_array = $array2;