Обновление любого значения в многомерных массивах - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь обновить значения в многомерном массиве (используя функцию, чтобы это можно было сделать динамически), но мой подход с циклическим просмотром каждого значения, похоже, не работает.Я пробовал разные решения, предлагаемые на stackoverflow, но я все еще не могу заставить его работать как функция (с динамическими ключами).Вот простой пример с двухуровневым массивом, но он должен работать на любом уровне.

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);

1 Ответ

1 голос
/ 04 июня 2019

Вам нужен рекурсивный вызов функции и установка новых значений. Не только значение, но измененный глубокий массив.

  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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...