Intereting Posts

строка для преобразования ассоциативного массива

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

В основном у меня есть строка, например

1) "/0/bar" 2) "/build/0/foo/1" 

и нужно преобразовать это в многомерный массив

 1) $result[0][bar] 2) $result[build][0][foo][1] 

До сих пор я пробовал:

 $query = "/build/0/foo/1"; $queryAr = []; $current = &$queryAr; $keys = explode("/", $query); foreach($keys as $key) { @$current = &$current[$key]; } $current = $value; 

тишина выхода – довольно хакерский способ добиться этого …

Вам нужно обрезать первую / строку. живая демонстрация .

 <?php $query = "/build/0/foo/1"; $queryAr = []; $current = &$queryAr; $keys = explode("/", trim($query, '/')); foreach($keys as $key) { @$current = &$current[$key]; } $current = $value; print_r($queryAr); 

Я попробовал рекурсивную версию функции:

 $query = "/build/0/foo/1"; print_r($result = buildNestedArray(explode('/', trim($query, '/')))); function buildNestedArray($keys) { $k = current($keys); $result = [$k => 'DONE']; array_shift($keys); if (sizeof($keys) > 0) { $result[$k] = buildNestedArray($keys); } return $result; } 

output: Array ( [build] => Array ( [0] => Array ( [foo] => Array ( [1] => DONE ) ) ) )