php - 更新多维数组中的任何值
问题描述
我正在尝试更新多维数组中的值(使用函数以便可以动态完成),但是我循环遍历每个值的方法似乎不起作用。我尝试了 stackoverflow 上提供的不同解决方案,但我似乎仍然无法让它作为一个函数工作(使用动态键)。这是一个带有 2 级数组的简单示例,但它应该适用于任何级别。
function updateArrayValue($array,$key_to_find,$new_value){
foreach($array as $key => $value){
if($key == $key_to_find){
$value = $new_value;
break; // Stop the loop
}
}
return $array;
}
$array = array("001"=>"red", "002"=>"green", "003"=>array("003-001"=>"blue", "003-002"=>"yellow"));
$array = updateArrayValue($array,"003-001","purple");
var_dump($array);
解决方案
您需要递归调用函数并设置新值。不仅值,而且改变了深度数组。
function updateArrayValue($array,$key_to_find,$new_value){
foreach($array as $key => $value){
// if value is not an array then try set new value if is search key
if(!is_array($value)){
if($key == $key_to_find) {
$array[$key] = $new_value;
}
}
else {
// otherwise call function again on value array
$array[$key] = updateArrayValue($value, $key_to_find, $new_value);
}
}
return $array;
}
$array = array(
"001"=> "red",
"002"=> "green",
"003"=> array(
"003-001"=> "blue",
"003-002"=> "yellow"
));
$newArray = updateArrayValue($array,"003-001","purple");
var_dump($newArray);
推荐阅读
- javascript - javascript setTimeout() 无法正常工作
- c# - 未能在 MimeMessage (rotativa) 中添加附件以发送邮件
- reactjs - 使用 react-redux,通过 redux 状态将回调函数传递给通用组件的最佳实践是什么?
- java - 使用 FrameBuffer 和 SpriteBatch 时的纹理拉伸
- javascript - 如何从字符串中提取方程并求解,然后将答案放回 javascript 中的字符串中?
- c - 创建一个指向 11 个字符串的 char 指针数组,但在打印它们时遇到问题
- function - 使用 console.log 调用函数
- python - 如何使用方法 Pop 在 Python 中更改字典的键?
- javascript - 如果日期与选项卡名称相同,则 Google Sheets Apps 脚本复制数据行
- verilog - Machxo 2280C 上的块内存始终读取零