0

0

PHP 递归地在多维数组中特定键后插入键/值对

霞舞

霞舞

发布时间:2025-10-11 10:31:30

|

2260人浏览过

|

来源于php中文网

原创

php 递归地在多维数组中特定键后插入键/值对

本文旨在提供一个 PHP 函数,用于递归地遍历多维数组,并在每个包含特定键(例如 'banana')的子数组中插入新的键/值对(例如 'apple' => 'red')。该函数能够处理任意深度的嵌套数组,并在找到目标键后,将新的键/值对添加到同一层级的数组中。

在处理复杂的数据结构时,我们经常需要在多维数组中动态地添加或修改数据。当需要递归地在特定键的同级位置插入新的键/值对时,就需要一个能够处理任意深度嵌套数组的解决方案。下面的教程将提供一个 PHP 函数,实现这一功能。

函数实现

以下是一个 PHP 函数 ins_value_to_arr,它接受一个数组引用、一个要插入的键/值对数组,以及一个作为参照的兄弟键名作为参数。该函数递归地遍历数组,并在找到包含兄弟键名的子数组中插入新的键/值对。

function ins_value_to_arr(&$arr, $insVal = [] , $sibling = NULL){
    static  $ins; 
    static $sib;
    if($insVal){
        $ins = $insVal;
        $sib = $sibling;
    }
    $merge = false;
    foreach($arr as $k => &$val){
        if(is_array($val)){
           ins_value_to_arr($val); 
        }
        if($k == $sib){
            $merge = true;
        }
    }
    if($merge){
        $arr = array_merge($arr,$ins);
    }

    return $arr;
}

代码解释:

立即学习PHP免费学习笔记(深入)”;

一点PPT
一点PPT

一句话生成专业PPT,AI自动排版配图

下载
  1. function ins_value_to_arr(&$arr, $insVal = [] , $sibling = NULL): 定义函数 ins_value_to_arr,接受三个参数:
    • &$arr: 数组的引用,允许函数修改原始数组。
    • $insVal: 要插入的键/值对,默认为空数组。
    • $sibling: 作为参照的兄弟键名,默认为 NULL。
  2. static $ins; static $sib;: 使用静态变量来保存 $insVal 和 $sibling 的值,这样在递归调用时,这些值不会丢失。
  3. if($insVal){ ... }: 检查 $insVal 是否为空。如果不为空,则将 $insVal 赋值给静态变量 $ins,将 $sibling 赋值给静态变量 $sib。
  4. $merge = false;: 初始化一个布尔变量 $merge,用于标记是否需要合并数组。
  5. foreach($arr as $k =youjiankuohaophpcn &$val){ ... }: 遍历数组 $arr。
    • if(is_array($val)){ ins_value_to_arr($val); }: 如果当前元素 $val 是一个数组,则递归调用 ins_value_to_arr 函数,处理嵌套数组。
    • if($k == $sib){ $merge = true; }: 如果当前键 $k 等于兄弟键名 $sib,则将 $merge 设置为 true。
  6. if($merge){ $arr = array_merge($arr,$ins); }: 如果 $merge 为 true,则使用 array_merge 函数将 $ins 合并到 $arr 中。
  7. return $arr;: 返回修改后的数组。

使用示例

假设我们有以下多维数组:

$original = [
    0 => [
        'something1' => 'something',
        'banana' => 'yellow',
        'something2' => [
            'something3' => 'something',
            'something4' => [
                'something5' => 'something',
                'banana' => 'yellow',
                'something6' => [
                    'banana' => 'yellow',
                ]
            ],
            'banana' => 'yellow',
        ],
        'something7' => [
            0 => [
                'something8' => 'something',
                'banana' => 'yellow',
            ],
        ],
    ],
    1 => [
        'something9' => 'something',
        'banana' => 'yellow',
    ],
    2 => [
        'something10' => 'something',
    ],
];

现在,我们想在每个包含键 'banana' 的子数组中插入键/值对 'apple' => 'red'。我们可以这样调用函数:

ins_value_to_arr($original, ['apple' => 'red'], 'banana');

print_r($original);

预期输出:

Array
(
    [0] => Array
        (
            [something1] => something
            [banana] => yellow
            [apple] => red
            [something2] => Array
                (
                    [something3] => something
                    [something4] => Array
                        (
                            [something5] => something
                            [banana] => yellow
                            [apple] => red
                            [something6] => Array
                                (
                                    [banana] => yellow
                                    [apple] => red
                                )

                        )

                    [banana] => yellow
                    [apple] => red
                )

            [something7] => Array
                (
                    [0] => Array
                        (
                            [something8] => something
                            [banana] => yellow
                            [apple] => red
                        )

                )

        )

    [1] => Array
        (
            [something9] => something
            [banana] => yellow
            [apple] => red
        )

    [2] => Array
        (
            [something10] => something
        )

)

注意事项

  • 该函数会修改原始数组,因为它接受的是数组的引用 (&$arr)。
  • 静态变量的使用使得在递归调用中可以保持要插入的键/值对和兄弟键名的值。
  • array_merge 函数会将新的键/值对添加到数组的末尾,而不是紧跟在兄弟键名之后。 如果需要紧跟在兄弟键名之后,需要使用更复杂的数组操作。
  • 如果数组中不存在指定的兄弟键名,则不会插入新的键/值对。

总结

该函数提供了一种简单而有效的方法,可以在 PHP 中递归地在多维数组中插入键/值对。通过理解其工作原理和注意事项,您可以将其应用于各种数据处理场景中。 记住,在使用该函数时,要考虑到其对原始数组的修改以及插入位置的限制。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

254

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1089

2024.03.01

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

847

2023.08.22

php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

267

2025.12.04

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

550

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

30

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

45

2026.01.06

function是什么
function是什么

function是函数的意思,是一段具有特定功能的可重复使用的代码块,是程序的基本组成单元之一,可以接受输入参数,执行特定的操作,并返回结果。本专题为大家提供function是什么的相关的文章、下载、课程内容,供大家免费下载体验。

499

2023.08.04

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 13.5万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号