Я пишу функцию, чтобы взять теги из шаблона уса и генерировать хэш (причина этого заключается в том, чтобы иметь возможность принимать любой шаблон и быстро показывать разработчику, что ожидаемые переменные).Отладка рекурсивного цикла while (php)
Я извлекаю теги в плоский массив (достаточно просто), но следующий шаг сложный - мне нужно превратить плоский массив в многомерный массив, чтобы указать вложенную переменную.
Вот мой образец плоский массив:
$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;
}
Я думаю, что ошибка может быть, что он попадает в первый «если» и возвращает весь путь из функции, но я не уверен, и я не уверен, как это исправить.
Каков результат, который вы сейчас видите? – afuzzyllama
Он только строит его до «sub2» –
Я не думаю, что он попадает в 'if (preg_match ('/ \ /', $ tag))' он также дает мне об ошибке (предупреждение); – khael