1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > php二维数组取交集 php array交集 PHP二维数组取差集操作方法 - 非主流娱乐网

php二维数组取交集 php array交集 PHP二维数组取差集操作方法 - 非主流娱乐网

时间:2019-03-04 12:53:10

相关推荐

php二维数组取交集 php array交集 PHP二维数组取差集操作方法 - 非主流娱乐网

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

-07-11 23:14:16

来源: 非主流娱乐网责任编辑:小s0条评论

一、需求

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;

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。