欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

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

PHP 中对二维数组取差集操作。

例如:

$arr1 和 $arr2 中我需要 去掉 $arr1 中 和 $arr2 相同的部分。

如下面的两个数组中,最后我需要的是 $arr1 中 ["id"=>102,"name"=>"ptbird","age"=>19];

注明: 其中 id 是在唯一的,也就在任何一个数组中 id 唯一

  1. $arr1=[
  2.  0 => [
  3.    "id" => 100,
  4.    "name" => ptbird,
  5.    "age" => 19
  6.  ],
  7.  1 => [
  8.    "id" => 101,
  9.    "name" => ptbird,
  10.    "age" => 19
  11.  ],
  12.  2 => [
  13.    "id" => 102,
  14.    "name" => ptbird,
  15.    "age" => 19
  16.  ],
  17. ];
  18. $arr2=[
  19.  0 => [
  20.    "id" => 100,
  21.    "name" => ptbird,
  22.    "age" => 19
  23.  ],
  24.  1 => [
  25.    "id" => 101,
  26.    "name" => ptbird,
  27.    "age" => 19
  28.  ],
  29.  2 => [
  30.    "id" => 104,
  31.    "name" => ptbird2,
  32.    "age" => 19
  33.  ],
  34. ]

二、实现

弄了两个函数:

1、 如果一个数组中没有唯一的id,使用下面这种方式

  • 使用了 in_array() 和 闭包

  • 注意最后的一个 array_filter() 能够重新索引数组,将空的索引给去掉

  1. /**
  2. * 使用in_array()对两个二维数组取差集
  3. *  - 去除$arr1 中 存在和$arr2相同的部分之后的内容
  4. * @param $arr1
  5. * @param $arr2
  6. * @return array
  7. */
  8. function get_diff_array_by_filter($arr1,$arr2){
  9.    try{
  10.        return array_filter($arr1,function($v) use ($arr2){
  11.            return !in_array($v,$arr2);
  12.        });
  13.    }catch (\Exception $exception){
  14.        return $arr1;
  15.    }

2.如果一个数组中某个key是唯一的,则通过key操作不适用 in_array()

  1. /**
  2. * 根据唯一字段对两个二维数组取差集
  3. *  - 去除$arr1 中 存在和$arr2相同的部分之后的内容
  4. * - 返回差集数组
  5. * @param $arr1
  6. * @param $arr2
  7. * @param string $pk
  8. * @return array
  9. */
  10. function get_diff_array_by_pk($arr1,$arr2,$pk='pid'){
  11. try{
  12. $res=[];
  13. foreach($arr2 as $item) $tmpArr[$item[$pk]] = $item;
  14. foreach($arr1 as $v) if(! isset($tmpArr[$v[$pk]])) $res[] = $v;
  15. return $res;
  16. }catch (\Exception $exception){
  17. return $arr1;
  18. }
  19. }

               



来自  https://blog.csdn.net/qq_27229113/article/details/98624821


普通分类: