PHP 中对二维数组取差集操作。
例如:
$arr1 和 $arr2 中我需要 去掉 $arr1 中 和 $arr2 相同的部分。
如下面的两个数组中,最后我需要的是 $arr1 中 ["id"=>102,"name"=>"ptbird","age"=>19]
;
注明: 其中 id 是在唯一的,也就在任何一个数组中 id 唯一
- $arr1=[
- 0 => [
- "id" => 100,
- "name" => ptbird,
- "age" => 19
- ],
- 1 => [
- "id" => 101,
- "name" => ptbird,
- "age" => 19
- ],
- 2 => [
- "id" => 102,
- "name" => ptbird,
- "age" => 19
- ],
- ];
- $arr2=[
- 0 => [
- "id" => 100,
- "name" => ptbird,
- "age" => 19
- ],
- 1 => [
- "id" => 101,
- "name" => ptbird,
- "age" => 19
- ],
- 2 => [
- "id" => 104,
- "name" => ptbird2,
- "age" => 19
- ],
- ]
二、实现
弄了两个函数:
1、 如果一个数组中没有唯一的id,使用下面这种方式
使用了
in_array()
和闭包
注意最后的一个
array_filter()
能够重新索引数组,将空的索引给去掉
- /**
- * 使用in_array()对两个二维数组取差集
- * - 去除$arr1 中 存在和$arr2相同的部分之后的内容
- * @param $arr1
- * @param $arr2
- * @return array
- */
- function get_diff_array_by_filter($arr1,$arr2){
- try{
- return array_filter($arr1,function($v) use ($arr2){
- return !in_array($v,$arr2);
- });
- }catch (\Exception $exception){
- return $arr1;
- }
2.如果一个数组中某个key是唯一的,则通过key操作不适用 in_array()
- /**
- * 根据唯一字段对两个二维数组取差集
- * - 去除$arr1 中 存在和$arr2相同的部分之后的内容
- * - 返回差集数组
- * @param $arr1
- * @param $arr2
- * @param string $pk
- * @return array
- */
- function get_diff_array_by_pk($arr1,$arr2,$pk='pid'){
- try{
- $res=[];
- foreach($arr2 as $item) $tmpArr[$item[$pk]] = $item;
- foreach($arr1 as $v) if(! isset($tmpArr[$v[$pk]])) $res[] = $v;
- return $res;
- }catch (\Exception $exception){
- return $arr1;
- }
- }
来自 https://blog.csdn.net/qq_27229113/article/details/98624821