
本文将介绍如何在 PHP 中递归地遍历多维数组,并在每个包含特定键(例如 'banana')的子数组中插入新的键值对(例如 'apple' => 'red')。我们将提供一个可复用的函数,该函数能够处理任意深度的嵌套数组,并在目标键存在时,将新的键值对添加到同一级别的数组中。
在处理嵌套的多维数组时,我们需要一种能够深入到每个层级并执行操作的方法。递归函数是解决这类问题的理想选择。以下是一个 PHP 函数,它接受一个数组、要插入的键值对以及作为插入触发器的目标键作为参数:
function insertValueToArr(&$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)) {
insertValueToArr($val);
}
if ($k == $sib) {
$merge = true;
}
}
if ($merge) {
$arr = array_merge($arr, $ins);
}
return $arr;
}代码解释:
函数定义: insertValueToArr(&$arr, $insVal = [], $sibling = null) 定义了函数,它接受三个参数:
立即学习“PHP免费学习笔记(深入)”;
静态变量: 使用 static $ins; 和 static $sib; 来存储 $insVal 和 $sibling 的值,以便在递归调用中保持这些值。
初始化: if ($insVal) 块用于初始化静态变量 $ins 和 $sib。这确保了在第一次调用函数时,这些变量会被正确设置。
递归遍历: foreach ($arr as $k =youjiankuohaophpcn &$val) 循环遍历数组的每个元素。
目标键检查: if ($k == $sib):检查当前键是否与目标键 $sibling 匹配。如果匹配,则将 $merge 标志设置为 true。
插入键值对: if ($merge):如果在循环中找到了目标键,则使用 array_merge() 函数将新的键值对 $insVal 合并到当前数组中。array_merge会将后面的数组合并到前面的数组中。
返回数组: 函数返回修改后的数组。
假设我们有以下数组:
$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',
],
];要将键值对 'apple' => 'red' 插入到每个包含键 'banana' 的子数组中,我们可以这样调用该函数:
insertValueToArr($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
)
)通过使用递归函数,我们可以轻松地在 PHP 中处理嵌套的多维数组,并在满足特定条件时插入新的键值对。本文提供的函数是一个通用的解决方案,可以根据需要进行修改和扩展,以满足不同的需求。 记住,理解递归的原理和注意事项是编写高效且可靠的代码的关键。
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号