0
点赞
收藏
分享

微信扫一扫

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

举报

相关推荐

0 条评论