递归删除数组键前缀

2024-01-05

我有一个以下格式的数组(每个子数组都以父级的键作为前缀):

$input = array(
    'seo_text' => array(
        'seo_text_title'       => '',
        'seo_text_description' => '',
        'seo_text_button'      => array(
            'seo_text_button_text' => '',
            'seo_text_button_url'  => '',
            'seo_text_button_new_tab_enabled' => '',
        ),
    ),
);

我想将其转换为以下格式:

$input = array(
    'seo_text' => array(
        'title'       => '',
        'description' => '',
        'button'      => array(
            'text' => '',
            'url'  => '',
            'new_tab_enabled' => '',
        ),
    ),
);

我正在尝试编写一个递归函数,但它没有按照预期的方式工作。


一个办法:

function removeKeyPrefix(array $array, string $prefix = ''): array
{
    $newArray = [];
    $prefixLength = strlen($prefix);

    foreach ($array as $key => $value) {
        if (substr($key, 0, $prefixLength) === $prefix) {
            $newKey = substr($key, $prefixLength);
        } else {
            $newKey = $key;
        }

        $newArray[$newKey] = is_array($value) ? removeKeyPrefix($value, $key.'_') : $value;
    }

    return $newArray;
}

$input = removeKeyPrefix($input);

3v4l在线演示 https://3v4l.org/Z5cvQ

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

递归删除数组键前缀 的相关文章

随机推荐

  • extjs 4树通过其内部id(而不是通过记录索引)选择特定节点

    我正在尝试将数据视图 资源管理器窗口 与树 目录树 同步 当我单击数据视图上的元素时 我希望在树上选择相同的节点 问题是使用tree getSelectionModel select index 不允许我通过节点的内部 id 我在树存储中提
  • 如何将参数传递给 Dockerfile?

    我正在使用 RUN 指令Dockerfile安装 rpm RUN yum y install samplerpm 2 3 但是 我想传递值 2 3 作为参数 我的 RUN 指令应该类似于 RUN yum y install samplerp
  • 蓝牙 GATT - onServicesDiscovered(BluetoothGatt gatt, int status) 不包含所有服务

    我有代码连接到并尝试发现广告自定义服务的自定义 BLE 服务器设备提供的所有服务 代码works on 搭载 Android 5 1 的 Nexus 5 三星 SM T320 搭载 Android 4 4 2 中兴 Blade Vec 4G
  • git-svn:自动导入/创建 svn 修订版作为 git 标签

    我正在使用 git svn 来处理 svn 存储库 吉特master分支是svn的镜像trunk分支 唯一使用的 svn 分支 即 master 分支和 trunk 分支上的元素之间存在一对一的关系 我想要有与 svn 修订相对应的 git
  • 我应该将 .vcxproj.filter 文件添加到源代码管理吗?

    在评估 Visual Studio 2010 Beta 2 时 我看到在转换后的目录中 我的vcproj文件变成了vcxproj文件 还有vcxproj 过滤器每个项目旁边的文件似乎包含文件夹结构的描述 源文件 头文件等 您认为这些过滤器文
  • .Net Framework:当未捕获异常时,不会调用Finally块[重复]

    这个问题在这里已经有答案了 一个简单的控制台应用程序 在 Visual Studio 2019 Net Framework 4 7 Windows 中 static void Main string args try Console Wri
  • 禁用表单提交上的提交按钮的问题

    我正在使用 jQuery 禁用提交插件 但我遇到了问题 如果我禁用提交按钮 它们不会传递回服务器 因此我无法判断按下了哪个按钮 这是正常的吗 我能做些什么吗 我真的不想重组我的网站 所以我必须在表单提交时设置一个变量来告诉按下了哪个按钮 有
  • SFML 在 Windows 下加载字体时出错

    我一直在尝试使用 SFML 开发适用于 Windows 和 Linux 的跨平台应用程序 到目前为止一切都很顺利 除了 Windows 版本似乎无法加载字体 不过我在 Linux 下没有任何问题 我做了研究 并根据我执行的位置确保文件就位
  • 在Python中使用Popen执行Powershell脚本,如何获取Powershell脚本的输出并将其更新到网页?

    我创建了一个带有按钮的简单 HTML 当用户单击该按钮时 它将调用在服务器端执行的Python文件 在Python文件中 我使用Popen调用Powershell脚本 如下代码 command line r C WINDOWS system
  • 在Python中组合模块文件

    有没有一种方法可以将 Python 文件组合在一起 类似于 Java 中的 JAR 我需要一种打包 Python 类和函数集的方法 但与标准模块不同 我希望它位于一个文件中 在寻找同一问题的解决方案后 我最终编写了一个简单的工具 它将多个
  • 如何从Flash加载flex swf?

    我有一些在 Flex 中编译的 swf 我想将其加载到 flash pro 中的影片剪辑中 那么如何在 Flash CS4 中加载 flex swf 呢 怎么做这样的事情 您可以在这里阅读更多相关信息 http troygilbert co
  • Cakephp 路由前缀

    我的应用程序有 3 种不同的布局 与内容的不同部分相关 我想定义我的 url s 以便他们在开头的 ex 中包含该部分 mypage com part1 controller 我不知道如何改变路线来实现这一点 附 我不想要普通的前缀路由 其
  • 如何在日志文件名中的文件扩展名之前附加滚动索引

    我正在使用RollingLogFileAppender它工作得很好并且正在滚动到新文件中 但它在文件的最后添加了 1 2 等 所以我最终得到 log 1 log 2等等 所以从技术上讲 每个文件都有一个资源管理器不知道的新扩展名 所以我不能
  • scanf 不超过缓冲区溢出

    我有一个缓冲区 我不希望用户输入的字符多于缓冲区可以容纳的字符 以避免缓冲区溢出 我在用scanf并做了这样的事情 char buffer 30 0 scanf 30s buffer 但是 我知道如果用户输入超过 30 个 我会受到保护 但
  • 用户空间和内核线程之间的共享内存

    我正在开发一个涉及 kthreads 的内核应用程序 我创建一个结构数组并在用户空间中使用 malloc 分配内存 然后我调用系统调用 我实现的 并将数组的地址传递到内核空间 在我创建的系统调用处理程序中 我创建了 2 个 kthreads
  • 使用分组依据和按日期排序的 SQL 选择

    我正在使用 SQL Server 2008 我想知道是否可以在一个 select 语句中完成我的查询 而无需子查询 如果记录中的字段在最近 10 个创建的记录中为 true 我想将变量设置为 true 如果该字段在最后 10 个记录中为 t
  • Google GData .Net OAuthUtil.GetAccessToken 400 错误请求

    我正在尝试通过 Google Net GData 客户端库生成 OAuth 访问令牌 我一直在使用中的说明http code google com apis gdata docs auth oauth html http code goog
  • 在数据库中使用DXL导入SSJS脚本库

    我们需要使用 DXL 在数据库中导入 SSJS 库 为此 我们编写了一个 Java 代理 其代码如下 import lotus domino public class JavaAgent extends AgentBase private
  • 堆栈不足以继续安全地执行程序。 ASP.NET MVC 4

    我的搜索功能似乎在无限循环中继续 每次我的调试命中 POST actionresult 下面的操作时都会被触发 在我的 Masterpage cshtml 中 我有以下操作 li Html Action Search Search li 这
  • 递归删除数组键前缀

    我有一个以下格式的数组 每个子数组都以父级的键作为前缀 input array seo text gt array seo text title gt seo text description gt seo text button gt a