【发布时间】:2018-01-08 18:26:13
【问题描述】:
首先,我正在努力正确地表达问题......所以请耐心等待。我正在尝试使用递归遍历每个数组键/值的 foreach 循环来修改给定的数组。但是,我不想替换键或值,而是需要将新键和值添加到与匹配键相同的级别。
在下面的代码中,我遍历数组中的每个键值,如果键和值匹配,我想将一个新键添加到发生匹配的同一级别。我可以找到匹配项,但我不知道如何更新数组。我宁愿更新现有的数组也不愿建立一个新的。
这就是我想要完成的事情
给定这个数组:
array(
array(
'name' => 'name',
'label' => 'Label'
),
array(
'name' => 'name',
'label' => 'Label',
'sub_fields' => array(
array(
'name' => 'my_desired_target',
'label' => 'Label'
)
)
)
);
function change_recursively($arr){
foreach($arr as $key => $val){
if(is_array($val)){
change_recursively($val);
}else{
if($key == 'name' && $val == 'my_desired_target'){
//How to add new key here?
$arr['new_key'] = 'my new value';
}
}
}
}
如果我要 var_dump $arr,下面是我正在寻找的结果。在这种情况下,键 'name' 和值 'my_desired_target' 匹配,并且新键 'new_key' 和值 'my new value' 被添加到同一级别。
array(
array(
'name' => 'name',
'label' => 'Label'
),
array(
'name' => 'name',
'label' => 'Label',
'sub_fields' => array(
array(
'name' => 'my_desired_target',
'label' => 'Label',
'new_key' => 'my new value'
)
)
)
)
我已经研究过使用 array_walk_recursive 和 array_map,但是这两个函数似乎都无法跟踪您在数组中的深度。
【问题讨论】:
-
我快到了,但我不知道如何完成它。这就像一堵砖墙在芬兰线上撞到了我。我有路径,但如何将其转换为数组地址? 3v4l.org/rmXQ2
标签: php recursion multidimensional-array