后端 php相关

php用到可复用的方法

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
常用的php封装的功能函数方法


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


二维数组 去掉重复项

$arr = [
  13 =>  [
    "id" => 5
    "per_name" => "添加权限"
  ],
  14 =>  [
    "id" => 6
    "per_name" => "用户管理"
  ]
]
$powers =[
    14 =>  [
    "id" => 6
    "per_name" => "用户管理"
  ]
]
//获取差集
$diff= array_diff_ukey($arr,$powers,function ($key1,$key2)use($arr,$powers)
{
    //不存在就直接返回
    if(empty($powers[$key2]['id'])){
        return 1;
    }elseif (empty($arr[$key1]['id'])){
        return -1;
    }
    $id1=$arr[$key1]['id'];
    $id2=$powers[$key2]['id'];
    if ($id1 ==$id2)
        return 0;
    else if ($id1 > $id2)
        return 1;
    else
        return -1;
});
//数组合并 最后得出的就是不重复的内容
$powers=array_merge($powers,$diff);

递归 转化为tree(树形)数组


    /**
     * arr_old 传入的数组
     * key 指定自身id的名称 默认为id
     * pid 指定父级id的名称 默认为pid
     * son 指定子集的名称 默认为son
     */
      function get_tree_rec($arr_old,$key='id',$pid='pid',$son='son', $id = [])
    {
        $ido = [];
        if (empty($arr_old)) {
            //如果为空说明当前的id是所有的id  可以进行组和
            //倒序循环
            for ($i = count($id) - 1; $i > 0; $i--) {
                foreach ($id[$i] as $v1) {
                    foreach ($id[$i - 1] as &$v2) {
                        if ($v2[$key] == $v1[$pid]) {
                            //设置子名称
                            $v2[$son][] = $v1;
                        }
                    }
                }
            }
            return  $id[0];
        }
        $res = array_filter($arr_old, function ($v) use (&$ido, &$id,$pid,$key) {

            // echo ($v[$pid] ."\n");
            if ($v[$pid] == 0) {
                array_push($ido, $v);
                return false;
            } else {
                //如果数组中存在该数据
                if (!empty($id) and count($id) > 0) {
                    // print_r(array_column(array_slice($id, -1)[0], $key));
                    $arr = array_column(array_slice($id, -1)[0], $key);
                    if (in_array($v[$pid], $arr)) {
                        array_push($ido, $v);
                        return false;
                    }
                }
            }
            return true;
        });
        array_push($id, $ido);
        return $this->get_tree_rec($res,$key,$pid,$son,$id);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值