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