Допустим, у меня такой код:
$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 вашего рабочего кода.