PHP 二维数组取差集操作方法

网友投稿 245 2022-10-31


PHP 二维数组取差集操作方法

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; }}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Linux操作系统特点和发行版介绍
下一篇:Spring Cloud Alibaba 使用 Feign+Sentinel 完成熔断的示例
相关文章

 发表评论

评论列表