冷静下来,我正在努力正确地说出问题......所以请耐心等待。我试图使用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,但是这两个函数似乎都没有跟踪你在数组中的深度。
答案 0 :(得分:1)
使用参考:
有用的链接:PHP foreach change original array values
您的工作代码:
$arr = 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';
}
}
}
}
change_recursively($arr);
print_r($arr);
希望它有所帮助!