首页 > 解决方案 > 更新多维数组中的任何值

问题描述

我正在尝试更新多维数组中的值(使用函数以便可以动态完成),但是我循环遍历每个值的方法似乎不起作用。我尝试了 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);

标签: phparraysmultidimensional-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);

推荐阅读