多平台统一管理软件接口,如何实现多平台统一管理软件接口
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小时内删除侵权内容。
发表评论
评论列表