首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PHP:如何以递归方式在树状JSON结构中搜索ID,并返回包含所有先前ID的路径

PHP中可以使用递归方式在树状JSON结构中搜索ID,并返回包含所有先前ID的路径。下面是一个示例代码:

代码语言:txt
复制
function searchIdInJson($json, $id, $path = []) {
    foreach ($json as $key => $value) {
        if ($key === 'id' && $value === $id) {
            $path[] = $id;
            return $path;
        }
        if (is_array($value)) {
            $result = searchIdInJson($value, $id, $path);
            if ($result !== null) {
                $path[] = $key;
                return $result;
            }
        }
    }
    return null;
}

// 示例用法
$json = [
    'id' => 'root',
    'children' => [
        [
            'id' => '1',
            'children' => [
                [
                    'id' => '2',
                    'children' => [
                        [
                            'id' => '3',
                            'children' => []
                        ]
                    ]
                ]
            ]
        ],
        [
            'id' => '4',
            'children' => []
        ]
    ]
];

$id = '3';
$path = searchIdInJson($json, $id);
if ($path !== null) {
    echo implode(' -> ', $path);
} else {
    echo 'ID not found';
}

上述代码中,searchIdInJson函数接受三个参数:$json表示要搜索的JSON结构,$id表示要搜索的ID,$path表示当前搜索路径。函数首先遍历JSON结构,如果找到匹配的ID,则将该ID添加到路径中并返回路径。如果当前值是一个数组,则递归调用searchIdInJson函数进行深度搜索。如果找到匹配的ID,则将当前键添加到路径中并返回路径。如果未找到匹配的ID,则返回null

在示例用法中,我们定义了一个包含树状结构的JSON,并指定要搜索的ID为3。然后调用searchIdInJson函数进行搜索,并将结果打印出来。如果找到了匹配的ID,则打印出包含所有先前ID的路径;如果未找到匹配的ID,则打印出"ID not found"。

这种递归搜索方式可以用于在树状JSON结构中查找特定的ID,并返回包含所有先前ID的路径。这在处理具有层级关系的数据时非常有用,例如组织结构、目录结构等。

腾讯云相关产品和产品介绍链接地址:

请注意,以上链接仅供参考,具体产品选择应根据实际需求进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

说说微信小程序那些遇到坑,看看你有没有进坑,跳坑指南!小白快来看看吧

搜索功能可以根据用户搜索关键词找到用户侧或者推荐里相关内容。方便用户阅读和收藏。 知识库页面设计 小程序组件满足了所有的显示功能和结构(列表,窗口,按钮,事件) API齐全,便于逻辑开发。...配置,app里配置tab栏将出现在所有的一级页面。...每个初级页面都引用进去,之后二级三级页面上不使用tab切换,而是需要返回到初级页面。 树状结构展示 每一个库都有一个树状知识结构,大家请看这个例子。...每个层级展示方式是一样,所以正常情况下,我们都会选用递归方式来使展示。比如在这张图里,当我们判断这个节点拥有子节点,就想再次调用同样方法显示。...如果是未知层级树状结构,就会非常难以处理。在这里可以建议大家将树状结构变成数组形式,加上层级标识,wxml文件可以使用循环方式来处理层级显示。 顺序调用。

1.4K70

一个vuepress配置问题,引发js递归算法思考

递归函数呀呀呀呀呀呀 elog 同步语雀文档时,会自动创建elog.cache.json缓存文件, vueprss 项目根目录查看。...递归函数本质上是一个回调自身函数,用于改造数据结构,重点在于跳出循环机制,否则陷入死循环啦 # DFS vs BFS ? 什么是 DFS 、BFS ?...} traverse(start); // 从起始节点开始进行深度优先搜索 return visited; // 返回所有已访问节点 } 输出结果: dfs(graph, "A");...// 对图进行深度优先搜索,从起始节点 'A' 开始,打印遍历结果 // A // B // D // E // C // F // G 在上述代码,图使用邻接表表示,dfs 函数使用递归方式实现了深度优先搜索...如果遇到终点,就找到了一条路径;如果无法继续,则回溯到上一个节点,然后尝试探索其他路径。这个过程会递归地进行,或者使用栈来存储节点顺序。

26720

EngineerCMS工程师知识管理系统支持项目模板

实现思路和代码: 首先获取选中项目id,传到后端,后端查出这个项目的树状目录,生成json结构,再递归这个json结构,写入数据库,以及递归建立文件夹。...id作为下面的parentid进行递归 //根据项目模板id,取出项目目录json结构 //然后递归生成硬盘目录 //然后递归写入数据库 //根据模板项目id,取出权限数据——将目录id路径转成目录名称路径...= nil { beego.Error(err) } //递归写入数据库 models.Insertprojtemplet(Id, "$"+strconv.FormatInt(Id, 10)...if ispermission == "true" { } c.Data["json"] = "ok" c.ServeJSON() } 权限继承:根据项目模板id,获取它权限表,是id路径形式...(/521/658/*),根据这个id路径,查出目录名称路径(/可研阶段/水工专业/),根据这个项目模板名称路径,查新建项目的id路径,把这个id路径,存入权限表,就是新项目的权限继承了。

46230

java递归生成树形菜单_java递归无限层级树

完整示例代码地址如下: https://github.com/Dr-Water/springboot-action/tree/master/springboot-shiro 一、 权限树问题由来 开发难免遇到一个有多级菜单结构树...,或者多级部门结构树,亦或是省市区县多级结构,数据结构类似如下json数据: [ { "id": "1", "name": "主菜单1", "pid": "0", "menuChildren"...3", "pid": "0", "menuChildren": [] } ] 二、 解决方案 目前解决方案主要有以下两种方案: 方案一:后端把所有需要数据以一个大list返回前端,前端进行操作,把数据搞成树状结构...方案二: 后端在后端返回数据之前把数据搞成已经有层次结构数据,方案二也分为两种解决方法 方法一:次性将数据查询出来,java程序中进行树状结构构建 方法二: 第一次将最高层次数据查询出来,然后多次循环查询数据库将子数据查询出来...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

3.1K30

JSON神器之jq使用指南指北

就像 jq 其他所有内容一样,这些简单值接受一个输入产生一个输出 -42是一个有效 jq 表达式,它接受一个输入,忽略它,返回 42。...如果输入是空数组,则all返回true。 flatten,flatten(depth) 过滤器flatten将嵌套数组数组作为输入,生成一个平面数组,其中原始数组所有数组都已被其值递归替换。...如果输入已排序包含 x,则 bsearch(x) 将返回其在数组索引;否则,如果数组已排序,它将返回 (-1 - ix),其中 ix 是一个插入点,因此将 x 插入到 ix 后,该数组仍将被排序...结尾文件.jq。 程序导入模块默认搜索路径搜索(见下文)。和指令允许导入import器include更改此路径搜索路径路径会受到各种替换。...import RelativePathString as $NAME []; 导入相对于搜索路径目录给定路径中找到 JSON 文件。

28.1K30

linux常用命令、bash语法学习笔记,持续记录

/php -m #当你php命令文件目录时, /www/server/php/72/bin/php -m,宝塔php命令目录 根据这个原理,我们可以安装多个php版本,启动 /www/server...5. “&&”符号用法 shell 执行某个命令时候,会返回一个返回值,该返回值保存在 shell 变量 ? 。当 ?...10. tree命令 tree [目录名] 以树状图列出文件目录结构,tree -d 只显示目录信息 11. cat命令 cat命令用于查看内容较少纯文本文件,格式:cat [选项] [文件]。.../PageUp可以实现一页一页上下翻 14. grep命令 grep命令用于文本执行关键词搜索显示匹配结果,格式: grep [选项] [文件]。... Linux系统搜索工作一般都是通过 find命令来完成,它可以使用不同文件特性作为寻找条件(文件名、大小、修改时间、权限等信息),一旦匹配成功则默认将信息显示到屏幕上。

1.6K30

Nginx配置location总结及rewrite规则写法

/开头,所有这条规则将匹配到所有请求     # 但是正则和最长字符串会优先匹配     [ configuration B ] } location /documents/ {     # 匹配任何以...~ /documents/Abc {     # 匹配任何以 /documents/开头地址,匹配符合以后,还要继续往下搜索     # 只有后面的正则表达式没有匹配到时,才会采用这一条     ...A只匹配根目录结尾请求,后面不能带任何字符串。...rewrite和location异同:同:都能实现跳转;异:rewrite是同一域名内更改获取资源路径,而location是对另一类路径做控制访问或反向代理,可以proxy_pass到其他机器。...$server_name:服务器名称 $server_port:请求到达服务器端口号 $request_url:包含请求参数原始url,不包含主机名,“/foo/bar.php?

90710

mysql省市区递归查询_mysql 递归查询

= sTempChd; END WHILE; RETURN sTemp; END; 6、调用方式: 查询id为”7″节点所有上级节点: SELECT * from t_areainfo where...My … MySQL递归查询树状子节点、父节点具体实现 mysql版本(5.5.6等等)尚未支持循环递归查询,和sqlserver.oracle相比,mysql难于树状表中层层遍历子节点.本程序重点参考了下面的资料...` varchar(32) DEFAUL … MySQL递归查询树状子节点、父节点 表结构和表数据就不公示了,查询表user_role,主键是id,每条记录有parentid字段; 如下mysql...查询函数即可实现根据一个节点查询所有的子节点,根据一个子节点查询所有的父节点.对于数据 … mysql 递归查询 主要是对于层级关系查询 最近遇到了一个问题,mysql如何完成节点下所有节点或节点上所有父节点查询...Oracle我们知道有一个Hierarchical Queries可以通过CONNECT BY来查询,但是, … MySQL递归查询父子节点 1.表结构 CREATE TABLE folder(

10.8K20

tp5框架前台无限极导航菜单类实现方法分析

分享给大家供大家参考,具体如下: 适用于 id name pid sort 类似结构结构 使用方法:(tp5) 1、将最下面的代码保存到“前台”控制器目录下(名为 FrontNav.php),比如(...也可以放到基础类初始化方法:Base.php _initialize() 方法(不用多解释,这个是 tp5 初始化方法 貌似 init() 也行?...(子数组) * @param $allData 传递过来所有树状结构数组 * @param $parentId 初始化时父栏目id * @return array 树状结构数组...']); $tree[] = $v; } else { $number = 1; } } return $tree; } /** * 递归生成树状结构html * @param $allData array...由 createNavHtml() 方法传递过来 树形结构 数据(数组) * @return string 返回(最外层ul内部html)树状结构html */ private function

1.1K10

nginx location if 匹配规则

=前缀指令严格匹配这个查询。如果找到,停止搜索。 2. 所有剩下常规字符串,最长匹配。如果这个匹配使用^前缀,搜索停止。 3. 正则表达式,配置文件定义顺序。 4....如果为真,执行定义大括号rewrite模块指令,并将if指令配置指定给请求。if指令会从上一层配置中继承配置。...正则表达式可以包含匹配组,匹配结果后续可以使用变量$1..$9引用。如果正则表达式包含字符“}”或者“;”,整个表达式应该被包含在单引号或双引号引用。 使用“-f”和“!...如果replacement字符串以“http://”或“https://”开头,nginx将结束执行过程,返回给客户端一个重定向。...如果URI中含有参数(/app/test.php?id=5),默认情况下参数会被自动附加到替换串上,可以通过替换串末尾加上?标记来解决这一问题。

12.3K30

探索 MySQL 递归查询,优雅给树结构分页!

一、概述 递归查询是一种在数据库处理具有层级结构数据技术。它通过查询语句中嵌套引用自身,以实现对嵌套数据查询。递归查询处理树状结构、父子关系或层级关系数据时非常有用。...MySQL递归查询可以使用WITH RECURSIVE语句来实现。该语句允许我们定义一个递归查询,并在查询引用自身。 递归查询通常包含两个部分:基础查询和递归查询。...基础查询是指查询起始点,它返回递归查询初始结果集。 递归查询部分定义了如何从基础查询结果集中继续查询下一层数据,直到满足终止条件为止。...“注意:MySQL是8.0才引入窗口函数功能;属于MySQL8新特性 二、结构递归查询通常包含以下几个关键元素: 初始查询(Anchor Query):这是递归查询起点,返回初始结果集。...通过LIMIT和OFFSET可以设置每页条目数量和偏移量,实现分页查询。 六、总结 递归查询处理父子结构树状结构或层级关系数据时非常有用。它允许我们轻松地查询所有层级数据,无论层级有多深。

57610

Python 无限级分类树状结构生成算法 「实用代码」

无限级分类树状结构应用场景很多,例如后端研发需要把用户相关权限读取出来生成树状结构,前端研发拿到权限树之后可以按照结构展示用户有权限访问栏目;再例如网页上栏目分级: 作者初次接触树状结构生成需求时候...电吹风条目跟电器条目并无直接标识进行关联,但需要用树状结构来表明 电器 <- 家用电器 <- 电吹风 关系。...通过 parent 寻找父编号,建立关联关系操作实际上是循环往复,直到找完所有的结点,这跟递归算法非常契合,很轻松便能写出对应递归代码: def generate_tree(source, parent...这段递归代码往复循环过程通过 parent 来寻找子结点,找到子结点后将其添加到树。..., 0) print(json.dumps(permission_tree, ensure_ascii=False)) 终端输出结果如下图所示: 使用缓存优化算法 递归算法中有很多重复计算

2.2K10

用 100 行代码提升 10 倍性能

注意,只要任意数据对象任意属性值 (比如在上面的数据结构,只要 name, age, roles 任何一个属性值)包含这个关键词即可。...如果属性值是数组或者对象,那么数组元素或者对象值继续对输入内容进行匹配检测,递归检测下去,只要有命中,便算该数据匹配 如何设计这个功能,让搜索功能尽可能快?...id 数组时:[1, 2, 3],我们只需要遍历一边返回结果就能通过 id 扁平化 Map 里立即找到对应数据。...否则还要不停遍历原始数据数组找到对应数据. 因为 randomuser.me 返回信息包含 id 信息,所以我们暂时用 email 信息作为唯一标示。...所以只能扫描children收集子节点所有的可能 id,这步操作遍历过程占用了大部分时间 但是我们仍然需要满足这部分查询需求,所以我们要针对这个场景做一些优化 优化简短搜索场景 我们回想一下简单搜索场景

74220

Nginx葵花宝典—草根站长配置Nginx运维百科全书

如果找到,停止搜索~   正则匹配        为区分大小写正则匹配^~ 优先前缀匹配 匹配路径前缀,如果找到,停止搜索~*  正则匹配        为不区分大小写匹配 !~和!...然后Nginx按在配置文件出现顺序检查正则表达式路径,匹配上某个路径后即停止匹配使用该路径配置,否则使用最大前缀匹配路径配置。...,一般要使用break或不写,直接使用当前location数据源,完成本次请求 如果locationrewrite后,还需要进行其他处理,动态fastcgi请求(.php,.jsp)等,要用last...请求的当前URI(不带请求参数,参数位于$args),可以不同于浏览器传递$request_uri值,它可以通过内部重定向,或者使用index指令进行修改,$uri不包含主机名,”/foo/bar.html...服务器名,www.zhoulujun.cn$server_addr 服务器端地址,需要注意是:为了避免访问linux系统内核,应将ip地址提前设置配置文件

76020

听GPT 讲Rust源代码--srclibrustdoc(2)

在生成搜索索引过程,首先会遍历文档中所有的crate,对每个crate进行处理生成对应CrateData结构体。...然后,会遍历crate所有模块,获取模块路径和名称,添加到Paths结构。同时,也会遍历模块所有项(包括函数、结构体等),将它们路径和名称也添加到Paths结构。...最后,通过遍历所有的函数,根据函数名称、路径、选项等信息生成搜索索引条目。...ItemEntry: 表示文档一个项目条目,包括项目的 URL、ID 和文本。 AllTypes: 一个包含所有类型集合,用于文档列出所有类型。...build_external_paths(): 这个函数用于构建外部路径代码文档引用其他模块、类型、函数等时,需要使用外部路径。它接收一个解析后路径返回一个外部路径

12810

深入解析RedisJSON:Redis中直接处理JSON数据

在内部,RedisJSON将JSON数据解析为树状结构,并为每个节点分配一个唯一路径。这种存储方式使得RedisJSON能够高效地执行复杂查询和操作。...这种树结构允许根据key进行排序,支持快速定位、插入与删除操作。 与Redis其他数据结构hash)不同,Rax树提供了排序功能,这使得查询和操作具有特定顺序JSON元素时更加高效。...如果我们想获取JSON对象特定字段类型,我们可以key后面添加路径。...与传统关系型数据库相比,RedisJSON能够更快地处理大量实时数据。 树状结构存储:RedisJSON使用树状结构来存储JSON数据,这种存储方式允许快速访问子元素。...与传统文本存储方式相比,树状结构存储能够更高效地执行复杂查询和操作。 类型化原子操作:RedisJSON支持所有JSON值类型类型化原子操作。

16300

Mysql闭包表之关于国家区域一个实践

电商系统,我们总是会遇到一些树形结构数据存储需求。地理区域、位置信息存储,地理信息按照层级划分,会分为很多层级,就拿中国行政区域划分为例,简单省-市-县-镇-村就要五个级别。...一、设计闭包表 闭包表由Closure Table翻译而来,通过父节点、子节点、两节点距离来描述一棵树空间换时间思想,Closure Table,一种更为彻底路径结构,分别记录路径上相关结点全展开形式...----------+------------+----------------+------------+---------------+--------+ 13 rows in set 二、闭包表递归操作...如何递归构造出一颗全区域返回树 public AreaTreeResponse getAreaTree(Long areaId) { String cacheKey = BasicConst.Cache.AREA_TREE_KEY...JSONObject.toJSONString(areaTreeResponse); System.out.println("lingyejun test result :"+jsonObject); } 递归生成树状

56010
领券