Как преобразовать сплющенный массив в многомерный массив в PHP

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

Пример ниже:

Array ( [Template[URL]] => http://www.asdasdda.com [Template[UPC]] => 5484548546314 [Field[value]] => Test Example [Field[answer]] => 20 ) 

Вся помощь очень удобна. 🙂

UPDATE: это точный вывод данных, прежде чем запускать json_decode на данные.

 {"Template[URL]":"http://www.asdasdda.com","Template[UPC]":"5484548546314","Field[value]":"Test Example","Field[answer]":"20"} 

Related of "Как преобразовать сплющенный массив в многомерный массив в PHP"

Немного покрутился, и я думаю, что понял. Я не думаю, что есть более простой способ:

 foreach ($array as $key=>$value) { preg_match("/\[(.+)\]/",$key,$match); $newKey = preg_replace("/\[.+\]/","",$key); $newArray[$newKey][$match[1]] = $value; } 

Где print_r() из $newArray выглядит следующим образом:

 Array ( [Template] => Array ( [URL] => http://www.asdasdda.com [UPC] => 5484548546314 ) [Field] => Array ( [value] => Test Example [answer] => 20 ) ) 

Вероятно, проблема должна быть решена там, где создается массив. Если у вас нет доступа к этому, вы можете использовать регулярное выражение с эталонным циклом для преобразования массива:

 $array = [ "Template[URL]" => 'http://www.asdasdda.com', "Template[UPC]" => '5484548546314', "Multi[Level][Array]" => 'Hello World' ]; function convert(&$array, $key, $value) { preg_match_all("/(?=^)[^]]+(?=\[)|(?<=\[)[^]]+(?=\])/", $key, $keys); if ($keys = $keys[0]) { // Unset original key unset($array[$key]); // Dig into each level of keys and reassign the reference foreach($keys as $key) { if (!isset($array[$key])) $array[$key] = null; $array = &$array[$key]; } // Set the final level equal to the original value $array = $value; } } foreach($array as $key=>$value) { convert($array, $key, $value); } print_r($array); с $array = [ "Template[URL]" => 'http://www.asdasdda.com', "Template[UPC]" => '5484548546314', "Multi[Level][Array]" => 'Hello World' ]; function convert(&$array, $key, $value) { preg_match_all("/(?=^)[^]]+(?=\[)|(?<=\[)[^]]+(?=\])/", $key, $keys); if ($keys = $keys[0]) { // Unset original key unset($array[$key]); // Dig into each level of keys and reassign the reference foreach($keys as $key) { if (!isset($array[$key])) $array[$key] = null; $array = &$array[$key]; } // Set the final level equal to the original value $array = $value; } } foreach($array as $key=>$value) { convert($array, $key, $value); } print_r($array); 

Выходы:

 Array ( [Template] => Array ( [URL] => http://www.asdasdda.com [UPC] => 5484548546314 ) [Multi] => Array ( [Level] => Array ( [Array] => Hello World ) ) ) 

Ссылки используются, чтобы вы могли выкапывать на несколько уровней, если вам нужно.