@NikNetRu

PHP: изменение значения ключа в массиве переменной величины?

Я новичок в php. Возникла задача: установить значение $Arr['key1']...['keyn'] = $value .
Исходные данные массив ключей т.е путь 'key1....keyn' и $value.
Пытался реализовать через циклы и т.д и т.п. Но безрезультатно, по причине невозможности работать внутренним указателем массива. Мешает неопределенность размера массива.
Спасибо за подсказку.
  • Вопрос задан
  • 236 просмотров
Пригласить эксперта
Ответы на вопрос 2
TommyV888
@TommyV888 Куратор тега PHP
-
Если вы точно знаете все ключи, можно пройти по ним рекурсивно и поменять нужное значение:
$array = [
    'a' => [
        'b' => [
            'c' => [
                'd' => 'text'
            ]    
        ]
    ]
];


function set_value($indexes, &$array, $data)
{
   if(count($indexes) > 1){
       set_value(array_slice($indexes, 1), $array[$indexes[0]], $data);
   }else{
       $array[$indexes[0]] = $data;
   }
}

set_value(['a', 'b', 'c', 'd'], $array, 'TEST DATA');
Ответ написан
Immortal_pony
@Immortal_pony Куратор тега PHP
function setValue($value, $key, array &$arr) {
    foreach ($arr as $arrKey=>&$arrValue) {
        if ($arrKey == $key) {
            $arrValue = $value;
        } elseif (is_array($arrValue)) {
            setValue($value, $key, $arrValue); 
        } else {
            throw new \InvalidArgumentException("Key {$key} not found in array");
        }
    }
    
    return $arr;
}



// Check
$Arr['key1']['key2']['key3']['key4']['key5']['keyn'] = null;
setValue('Test Value', "keyn", $Arr);
var_dump($Arr);
/*
array(1) {
  ["key1"]=>
  array(1) {
    ["key2"]=>
    array(1) {
      ["key3"]=>
      array(1) {
        ["key4"]=>
        array(1) {
          ["key5"]=>
          array(1) {
            ["keyn"]=>
            string(10) "Test Value"
          }
        }
      }
    }
  }
}
*/
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы