Я боролся с этим в течение нескольких дней и хотел бросить его там и посмотреть, есть ли у кого-то идеи.
В основном у меня есть строка, например
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 ) ) ) )