首页 > 编程语言 >PHP数组转树形结构,获取任意子节点的全部父节点

PHP数组转树形结构,获取任意子节点的全部父节点

时间:2024-09-21 15:47:51浏览次数:1  
标签:arr level int 任意子 param array PHP data 节点

/**
 * 递归无限级分类,获取任意节点下所有子孩子
 * @param array $arr
 * @param int|string $pid 父级节点
 * @param string $p_name 父级节点名称
 * @param int $level 层级数
 * @return array
 */
function get_tree_all_children(array $arr, int|string $pid = 0, string $p_name = 'pid', int $level = 0): array
{
    $data = array();
    foreach ($arr as $k => $v) {
        if ($v[$p_name] == $pid) {
            $arr[$k]['level'] = $level;
            $data[]           = $arr[$k];
            $data             = array_merge($data, get_tree_all_children($arr, $v['id'], $p_name, $level + 1));
        }
    }
    return $data;
}

/**
 * 递归无限级分类,获取任意节点的所有父级
 * @param array $arr 数据
 * @param int|string $id 节点
 * @param string $p_name 父级节点名称
 * @param int $level 层级数
 * @return array
 */
function get_tree_all_parent(array $arr, int|string $id = 0, string $p_name = 'pid', int $level = 0): array
{
    $data = array();
    foreach ($arr as $k => $v) {
        if ((int)$id === (int)$v['id']) {
            $arr[$k]['level'] = $level;
            $data[]           = $arr[$k];
            $data             = array_merge($data, get_tree_all_parent($arr, (int)$v[$p_name], $p_name, $level - 1));
        }
    }
    $last_names = array_column($data, 'level');
    array_multisort($last_names, SORT_ASC, $data);
    return $data;
}

  

标签:arr,level,int,任意子,param,array,PHP,data,节点
From: https://www.cnblogs.com/shemmor/p/18424098

相关文章

  • PHP获取一些常用时间区间(本周、本月、本季度、今年,上周、上月、上季度、去年)
    /***@notes:获取快捷时间*@returnarray*@author:lavender*@time:2024/7/2315:36*/publicfunctiongetShortcutsTimeArea(){$arr=[];$timezone=new\DateTimeZone('PRC');$dateti......
  • PHP根据经纬度获取两个地点之间的直线距离
    /***根据两点间的经纬度计算距离*@param$lat1纬度1*@param$lng1经度1*@param$lat2纬度2*@param$lng2经度2*@returnarray*/functionget_distance($lat1,$lng1,$lat2,$lng2):array{//赤道半径(单位m)$earthRadius=6378137;$l......
  • PHP转换ip地址
    ip转换/***ip转换整型*@paramint|string|null$ipip地址*@returnint|string|null*/functionmy_ip2long($ip){$res=false;if(filter_var($ip,FILTER_VALIDATE_IP,FILTER_FLAG_IPV4)){$res=sprintf('%u',ip2long($ip));}......
  • PHP获取指定日期n天前后的日期列表
    /***获取指定日期n天前后的日期列表*@paramstring$date日期*@paramint$day_num天数*@paramstring$cate类型*@paramstring$format格式*@returnarray*/functionget_date_ab_list(string$date,int$day_num,string$cate='b',string$form......
  • PHP美化打印输出并结束程序执行
    话不多说,直接附上代码if(!function_exists('dd')){/***@notes:打印输出*@parammixed$vars*@returnvoid*@author:lavender*@time:2024/7/159:33*/functiondd(...$vars){/*ob_start();var_......
  • PHP抽奖算法
    一、初始化奖品id奖品的idpid奖品的自定义idtype奖品类型,1、虚拟奖品2、实物奖品3、礼包码待扩充name奖品名称total奖品总数chance获奖概率/抽奖基数10000daynum每日数量限制pay充值限制$prize=[['id'=>1,'pid'=>11,'type'=>1,'name'=>'典藏......
  • Thinkphp8安装topthink/think-captcha验证码的和使用方法
    ThinkPHP8默认没有验证码,安装验证码可以使用composer来安装验证码一、安装验证码执行composer安装验证码composerrequiretopthink/think-captcha二、使用方法1、在目录app\middleware.php中开启session\think\middleware\SessionInit::class2、配置验证码安装好验证......
  • 您在wp-config.php文件中提供的数据库用户名和密码可能不正确 的解决办法
    设置步骤复制配置文件在你的 htdocs 中的WordPress根目录下找到 wp-config-sample.php 文件。将 wp-config-sample.php 文件复制并重命名为 wp-config.php。编辑 wp-config.php 文件使用Notepad++或其他文本编辑器打开 wp-config.php 文件。修改以下......
  • 数据库连接错误:您在wp-config.php文件中提供的数据库用户名和密码可能不正确,或者无法
    为了解决“数据库连接错误”的问题,可以按照以下步骤进行操作:备份现有配置:在修改任何文件之前,请确保备份现有的wp-config.php文件,以防修改出错时能够恢复。重命名配置文件:将根目录下的wp-config-sample.php文件重命名为wp-config.php。这通常可以通过FTP客户端或通过服务器上......
  • 帝国CMS升级PHP版本为7.*空白问题_php7 页面空白
    当帝国CMS从较低版本的PHP升级到PHP7.x之后出现页面空白的问题,这通常是由于帝国CMS的代码与新的PHP版本不兼容导致的。以下是一些解决此类问题的方法:1.检查PHP版本兼容性确保帝国CMS版本与PHP7.x兼容。解决方法:查看官方文档:访问帝国CMS的官方网站或官方文档,查看推荐的PHP......