我正在寫一個函數從小鬍子模板把標籤並生成一個散列(這樣做的原因是爲了能夠採取任何給定的模板,並很快顯示出開發商什麼預期變量是)。調試遞歸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 2012-02-24 14:41:17
它只建立它,直到'sub2' – 2012-02-24 14:42:37
我不認爲它命中'if(preg_match('/ \ /',$ tag))'它給我一個錯誤也(警告); – khael 2012-02-24 14:49:39