递归搜索层级数组并根据ID构建URL路径
实现多维层级数组的URL路径生成函数
给定树形结构的多维数组,我们需要实现一个函数,传入数组和目标节点的id,生成从根节点到该目标节点的完整URL路径(格式如/Contact/Contact-County/Contact-Town-1/)。
完整实现代码
function getlink($array, $id) { foreach ($array as $node) { // 找到目标节点,返回带首尾斜杠的当前节点link if ($node['id'] == $id) { return '/' . $node['link'] . '/'; } // 当前节点有子节点时,递归查找子树 if (!empty($node['children'])) { $childPath = getlink($node['children'], $id); // 子树中找到目标路径时,拼接当前节点的link后返回 if ($childPath !== '') { return '/' . $node['link'] . $childPath; } } } // 未匹配到目标id,返回空字符串 return ''; }
代码逻辑说明
- 遍历节点:循环处理传入数组中的每个节点
- 匹配目标节点:如果当前节点
id与目标id一致,直接返回带首尾斜杠的节点link - 递归查找子树:若当前节点存在非空的
children数组,递归调用函数处理子节点 - 路径拼接:递归返回有效路径时,说明目标节点在当前节点的子树中,将当前节点
link与子路径拼接后返回 - 未找到处理:遍历结束仍未匹配到目标
id,返回空字符串
测试示例
用你提供的数组测试:
$tree = array ( 0 => array ( 'id' => '1', 'p_pag' => '0', 'link' => 'Contact', 'children' => array ( 0 => array ( 'id' => '2', 'p_pag' => '1', 'link' => 'Contact-County', 'children' => array ( 0 => array ( 'id' => '3', 'p_pag' => '2', 'link' => 'Contact-Town-1', 'children' => array ( ), ), ), ), ), ), ); echo getlink($tree, '3'); // 输出:/Contact/Contact-County/Contact-Town-1/
内容的提问来源于stack exchange,提问作者Scufi
相关产品推荐
相关产品推荐

