PHP: установить значение вложенного массива с помощью переменной в качестве ключа

Допустим, у меня такой код:

$array = [ 'a'=> [ 'b' => [ 'c'=>'some value', ], ], ]; $array['a']['b']['c'] = 'new value'; 

Конечно, это работает, но я хочу обновить этот ключ «c» с помощью переменной, что-то вроде этого:

 $keys = '[a][b][c]'; $array{$keys} = 'new value'; 

Но ключи обрабатываются как строка, и это то, что я получаю:

 $array['[a][b][c]'] = 'new value'; 

Поэтому мне нужна помощь, чтобы показать мне правильный способ сделать эту работу без использования eval ().

Кстати, может быть любое количество гнезд массивов, поэтому что-то вроде этого не является хорошим ответом:

 $key1 = 'a'; $key2 = 'b'; $key3 = 'c'; $array[$key1][$key2][$key3] = 'new value'; 

Это не лучший способ определить ваши ключи, но:

 $array = []; $keys = '[a][b][c]'; $value = 'HELLO WORLD'; $keys = explode('][', trim($keys, '[]')); $reference = &$array; foreach ($keys as $key) { if (!array_key_exists($key, $reference)) { $reference[$key] = []; } $reference = &$reference[$key]; } $reference = $value; unset($reference); var_dump($array); с $array = []; $keys = '[a][b][c]'; $value = 'HELLO WORLD'; $keys = explode('][', trim($keys, '[]')); $reference = &$array; foreach ($keys as $key) { if (!array_key_exists($key, $reference)) { $reference[$key] = []; } $reference = &$reference[$key]; } $reference = $value; unset($reference); var_dump($array); 

Если вам нужно определить последовательность ключей в такой строке, то проще просто использовать простой разделитель, который может быть взорван, а не нужен для подстройки, а также для создания массива отдельных ключей, поэтому что-то более простое, как abc , будет легче работать, чем [a][b][c]

демонстрация

Привет, вы можете сделать это, как это, через массив ключей:

Это ваш массив структурирован:

 $array = array( 'a'=> array( 'b' => array( 'c'=>'some value', ), ), ); 

Это код PHP для получения значения из вашего массива с помощью динамических клавиш:

 $result = $array; //Init an result array by the content of $array $keys = array('a','b','c'); //Make an array of keys //For loop to get result by keys for($i=0;$i<count($keys);$i++){ $result = $result[$keys[$i]]; } echo $result; // $result = 'new value' 

Надеюсь, что ответ поможет вам, найдите здесь PHPFiddle вашего рабочего кода.