在 PHP 中从多维数组构建路径

2024-03-19

我有一个数组,例如:

$tree = array(
    'folder_1' => array(
        'folder_1_1',
        'folder_1_2' => array(
            'folder_1_2_1',
            'folder_1_2_2'
        ),
        'folder_1_3'
    ),
    'folder_2' => array(
        'folder_2_1' => array(
            'folder_2_1_1' => array(
                'folder_2_1_1_1',
                'folder_2_1_1_2'
            )
        ),
    )
);

我正在尝试构建一系列路径:

$paths = array(
    'folder_1',
    'folder_1/folder_1_1',
    'folder_1/folder_1_2',
    'folder_1/folder_1_2/folder_1_2_1',
    'folder_1/folder_1_2/folder_1_2_2',
    'folder_2',
    'folder_2/folder_2_1',
    ...
);

我似乎无法找到实现这一目标的方法。我遇到的问题是文件夹名称可以是数组键,也可以是数组元素。

这是我到目前为止所做的,但我还没有找到解决方案......

$paths = transform_tree_to_paths($trees);

function transform_tree_to_paths($trees, $current_path = '', $paths = array())
{

    if (is_array($trees)) {
        foreach ($trees as $tree => $children) {
            $current_path .= $tree . '/';
            return transform_tree_to_paths($children, $current_path, $paths);
        }
        $paths[] = $current_path;
        $current_path = '';
    } else {
        $paths[]  = $trees;
    }

    return $paths;
}

像这样的事情怎么样?

function gen_path($tree, $parent=null) {
    $paths = array();

    //add trailing slash to parent if it is not null
    if($parent !== null) {
        $parent = $parent.'/';
    }

     //loop through the tree array
     foreach($tree as $k => $v) {
        if(is_array($v)) {
            $currentPath = $parent.$k;
            $paths[] = $currentPath;
            $paths = array_merge($paths, gen_path($v, $currentPath));
        } else {
            $paths[] = $parent.$v;
        }
    }

    return $paths;
}

你的方向是正确的,但有点偏离目标。函数中递归函数调用之前的 return 语句导致 foreach 循环之后的所有内容都不会被调用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 PHP 中从多维数组构建路径 的相关文章

  • 在关联数组中查找重复值并将它们添加到计数中

    您好 我正在尝试计算关联数组中重复值的数量 如下所示 array 3 0 gt array 3 Title gt string 25 hello Price gt int 50 Count gt int 1 1 gt array 3 Tit
  • 跳过解析 CODE 标签内的 BBCode

    我正在使用以下方法解析 BBCoderegex以便将其替换为 HTML 我现在被困住了 因为 code 标签解析 基本上 当你这样做时 code b this is bb b u code in u i code i code 它不应该取代
  • 如何替换每隔一个的空白?

    我想用 替换每个第二个空格 using preg replace 并输入这样的字符串 string a b c d e f g h i 应该会产生如下输出 a b c d e f g h i thanks 您可以组合使用explode ht
  • Web 服务器和 servlet 容器之间的区别

    Web 服务器 和 Servlet 容器 有什么区别 一般来说 所有 Web 服务器也是 Servlet Web 容器 反之亦然吗 我一直在使用 Apache Tomcat for JSP 和 Apache for PHP 但无法弄清楚这两
  • 扩展 PHP 正则表达式以涵盖“srcset”和“style”属性

    我创建了一个 WordPress 插件 可以将所有链接变成协议相关 URL https en wikipedia org wiki Wikipedia Protocol relative URL 删除http and https 基于我在中
  • 在 PHP 中调用用户定义的函数 eval()

    我一直在使用 eval 函数进行 php 测试 但 eval 似乎无法正确调用用户定义的函数 请看我的例子 function equals a b if t r return true else throw new Exception ex
  • 如何在 PHP 中实现前向索引?

    我希望在 PHP 中实现一个简单的前向索引器 是的 我确实知道 PHP 并不是完成这项任务的最佳工具 但无论如何我还是想这样做 其背后的理由很简单 我想要一个 并且是 PHP 版本 让我们做一些基本假设 整个互联网包括 大约五千个 HTML
  • UTF-8、PHP 和 XML Mysql

    我在解决这个问题时遇到了很大的问题 我有一个编码 latin1 swedish ci 的 mysql 数据库和一个存储名称和地址的表 我正在尝试输出 UTF 8 XML 文件 但在使用以下字符串时遇到问题 Otiv gen它被输出为Otiv
  • symfony 2.0足够稳定可以使用吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我怀疑是否交响乐2 0够稳定可以使用吗 因为我从来没有用过Symfony before 看起来交响乐2比以前的版本好得多 我不想在几个月后重新学
  • php同时上传最大文件数

    我正在使用标签 用于使用 php 上传多个文件 我注意到 如果我选择超过 20 个文件 php 只会上传前 20 个文件 有没有办法扩大这个限制 这个限制被添加到PHP 5 2 12 https www php net releases 5
  • 根据注册后的时间自动删除Wordpress用户?

    在使用用户访问管理器的基本 WordPress 3 1 设置中 是否可以自动删除 x 天前的用户 我没有找到此功能的插件 人们将如何实施这一举措 我是否能够使用 sql 或 php 查询设置一个 cron 作业 从而每天自动从数据库中删除
  • 如何在javascript中显示目录中的所有图像?

    我想在 javascript 的帮助下动态显示目录中的所有图像 我怎样才能做到这一点 我不认为这是可能的 但如果您向 ASP NET 或 PHP 或类似 页面发出 AJAX 请求 它们可以列出文件夹中的文件并将其返回以供 Javascrip
  • 如何在 Smalltalk 中管理二维数组?

    我有一个点列表 必须进行侵蚀 膨胀操作 我需要一种 2d 数组 但在 VisualWorks 中找不到如何操作 我知道 Squeak 中有一个 Array2d 类 但我必须使用 VW 许多 Smalltalk 实现都会有某种 Matrix
  • 如何获取wordpress中文件的本地路径

    由于在wordpress中 上传的文件 图像以3种不同的大小存储 从而占用内存 我有一个代码可以根据给定图像的 URL 来调整图像的大小 调整大小的代码是 img wp get image editor image url if is wp
  • 新行分隔符不适用于 group_concat 函数

    我有一根绳子 name lastname name2 lastname2 包含数据库表中的值 我想显示它 喜欢 name lastname name2 lastname2 我使用 group concat 函数 它适用于逗号分隔符 但我需要
  • php 发送带有图像的电子邮件

    我正在尝试发送一封带有图片的电子邮件 我的电子邮件正文是 当我收到电子邮件时 我看不到图片 相反 我 看 img src http planet earth bogus us icons secret pictures gif 我知道这是因
  • rewrite_mod 已启用,但 .htaccess 不起作用

    我在 Amazon EC2 的 ubuntu 12 04 中使用 apache 2 2 我使用启用了 mod rewrite sudo a2enmod rewrite 并能够看到 apache2ctl M 现在我编写了以下 htaccess
  • POST 之后在 PHP 中设置 Location 标头时避免 HTTP 302 响应代码

    我需要放一个201 CreatedPOST 请求的响应代码和 Location 标头 但由于某种原因我仍然收到 302 响应 这就是我所拥有的 header HTTP 1 1 201 header Location The new reso
  • 性能方面插值(直接插入字符串)VS串联[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • jQuery 不断 ping 以获得 Ajax 响应

    如何使用 jQuery 不断运行 PHP 脚本并每秒获取响应 并将鼠标上的少量数据发送到同一脚本 我真的需要添加一些随机扩展才能让这样一个简单的计时器工作吗 迭代是人类的 递归是神圣的 L 彼得 多伊奇 http www devtopics

随机推荐

  • Javascript 在元素上切换类

    假设我有这个 HTML 结构 div class sType click div class Switcher span class customText Custom text span div div div class sType c
  • 使用 babel 递归地转译服务器文件

    我的文件夹结构是这样的 functions dist private server controllers middleware clientAuth js someOtherAuth js index js model js router
  • Highcharts 日期相差一天

    我以毫秒为单位传递 x 轴 然后将 x 轴定义为 xAxis type datetime 然而 Highcharts 似乎没有在 x 轴上获得准确的日期 而是相差一天 为了说明这一点 将鼠标悬停在任何条形图上 在这篇文章的底部拨弄 您将看到
  • mockito 的学习资源 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要使用mockito为现有代码创建单元测试框架 我找不到一个开始学习 Mockito 的好地方 你能给我推荐一个很好的mockito学
  • 在缓存图像上触发 load() 事件的更好方法是什么?

    我正在编写一个脚本 该脚本等待隐藏内容加载div在激活指向它的缩略图之前 preload img first child bind load activateThumb each function if this complete this
  • 如何获取属性的串联值?

    XPath 表达式 div concat id class 失败并出现错误 The expression is not a legal expression 在 Firefox 25 0 中 来自用户脚本 为什么 以及如何解决 对于输入 d
  • 如何通过 MediaWiki API 从 Wikipedia 文章中获取信息框? [复制]

    这个问题在这里已经有答案了 维基百科文章可能有信息框模板 通过以下调用 我可以获得包含信息框的文章的第一部分 http en wikipedia org w api php action parse pageid 568801 sectio
  • 使用 sed 将文件中的字符串替换为该名称的变量的内容

    我正在尝试使用 sed 将 XXX 形式的文件中的模板字符串替换为 shell 脚本中名为 XXX 的变量的值 例如以下完美运行 sed s user home user home gi So if user home fred下列 Nam
  • 使用log4j2,如何记录键值对

    我需要创建带有键值对的日志 如下所示 PatternLayout 是否支持使用 log4j2 xml 对线程中的静态字段 如 log level class name event id 等 执行此操作 日志样本 2014 06 18 11
  • Power BI 图表中的自定义排序

    最近我遇到一个问题 我需要按照我在 PowerBi 报告中定义的方式显示列顺序 问题是 PowerBI 按升序 A gt Z 或降序 Z gt A 对列进行排序 那么如果必须应用他的自定义顺序 他应该如何实现这一目标 Here is and
  • Azure 云上的开发、暂存和生产环境

    我正在开发的应用程序需要三个环境 一个开发环境 其中最新版本的代码 在每次提交上构建 和测试发生 我们合并开发和测试环境以提高效率 我们有一个临时环境 用于产品演示和演示 以及具有实时数据和客户的生产环境 现在 这将如何映射到 Azure
  • Julia:大型数组的打印有限

    我使用脚本文件在 Julia 中生成了许多大型数组 打印整个数组很麻烦 但我想检查前几行是否有意义 我知道 REPL 中的打印受到屏幕尺寸的限制 例如 julia gt zeros 1000 10 1000 10 Array Float64
  • Java中解析远程文件的FLV头(持续时间)

    我正在寻找一个专门在 Java 中解析 FLV 标头持续时间的示例 给定 FLV 文件的 URL 我只想下载标头并解析出持续时间 我有 FLV 规范 但我想要一个示例 Python 或 PHP 也可以 但首选 Java 您在下载标头或解析标
  • Phoenix:使用 Content-Type: application/json 处理 POST 请求正文

    我想处理传入的 POSTapplication json内容类型 我只是想返回发布的 JSON 作为对测试的响应 如下所示 WebhookController 控制器 pipeline api do plug accepts json en
  • 如何在 timeFormat d3 中添加自定义值?

    我有一个数据集 日期指定为date Q3 1954 Q4 1954 Q1 1955 Q2 1955 Q3 1955 Q4 1955 Q3 1955 Q4 1955 Q1 1956 我希望它位于 x 轴上并且数据点对应于每个日期 D3 v4
  • 将焦点设置在功能组件中的特定按钮上的反应方式?

    您好 我是新来反应的 在我的页面加载上 我需要将焦点放在按钮上 我正在使用功能组件 我看过类组件的示例 其中使用 componentDidMount 并使用 refs 设置焦点 这里我使用功能组件 也没有使用 ComponentDidMou
  • __init__() 收到意外的关键字参数“inputs”

    class Model def init self self model Sequential self model add Conv2D 24 3 2 valid input shape 75 75 3 self model add Ba
  • TypeScript 项目中缺少基本 DOM 类型

    我正在使用 TypeScript 设置一个 Web 应用程序 但我似乎缺少一些我需要的基本类型 当我编译时 npm run build 我收到以下错误 错误 TS2304 找不到名称 HTMLElement 错误 TS2304 找不到名称
  • XCode 不会将子目录中的 C++ 源文件添加到编译源中

    我使用 XCode 5 1 进行 C 开发 我有现有代码 通过从 Finder 拖动文件将其添加到项目中 该项目显示了所有必要的 h and cpp文件 但是当我点击Build Phases gt Compile Sources 我只看到来
  • 在 PHP 中从多维数组构建路径

    我有一个数组 例如 tree array folder 1 gt array folder 1 1 folder 1 2 gt array folder 1 2 1 folder 1 2 2 folder 1 3 folder 2 gt a