Я пишу функцию, которая берет теги из шаблона усов и генерирует хеш (причина этого в том, чтобы иметь возможность взять любой данный шаблон и быстро показать разработчику, каковы ожидаемые переменные).
Я извлекаю теги в плоский массив (достаточно просто), но следующий шаг сложен - мне нужно превратить плоский массив в многомерный массив, чтобы указать вложенную переменную.
Вот мой примерплоский массив:
$arr = array(
'one',
'#two',
'sub1',
'sub2',
'/two',
'three'
);
и ожидаемый результат:
$newArray = array(
'one'=>'',
'two'=>array(
'sub1'=>'',
'sub2'=>''
),
'three'=>''
);
Я уже близко, но еще не совсем там.Я думал, что рекурсивная функция будет способом пойти (хотя я открыт для другого решения).Вот что у меня так далеко:
function recurse($array, $i = 0) {
$nested = array();
while ($i < count($array)):
$tag = $array[$i];
if (preg_match('/\//',$tag)) {
return $nested;
} elseif (preg_match('/^#/',$tag)) {
$tag = str_replace('#','',$tag);
$nested[$tag] = recurse($array, $i+1);
$i+= count($nested[$tag])+1;
} else {
$nested[$tag] = '';
$i++;
}
endwhile;
return $nested;
}
Я думаю, что ошибка может заключаться в том, что он попадает в первое «если» и возвращает весь путь из функции, но я не уверен, такжеЯ уверен, как это исправить.