我正在寻找一个小帮助,非常感谢,我有一个原始的意大利面条PHP代码我转换为codeigniter,似乎工作但输出不准确,我的语法缺少什么
raw php
function displayMenu($parent =0) {
$query =mysql_query("SELECT * "
. " FROM tbl_org_structure "
. "WHERE parent_id='$parent'"
) or die(mysql_error());
if(mysql_num_rows($query) > 0 ){
echo '<ul>';
while ($row = mysql_fetch_array($query)) {
echo '<li>'.$row['name'];
displayMenu($row['id']);
echo '</li>';
}
echo '</ul>';
}
}
我的codeigniter等价物
function getHierarchy($parent=0){
$hierarchy = $this->db
->where('parent_id',$parent)
->get('tbl_org_structure')
->result();
$stringBuilder='<ul>';
foreach ($hierarchy as $chainOfCommand):
$stringBuilder.='<li>'.$chainOfCommand->name;
$this->getHierarchy($chainOfCommand->id);
$stringBuilder.='</li>';
endforeach;
$stringBuilder.='</ul>';
echo $stringBuilder;
}
原始php输出
董事会
Chief Executive Officer (CEO)
Finance Department
FC
test
CA
Human Resources Department (HR)
HOR
MO
IT Department
TSM
Sys Dev
Sales Department
Acc M
MD
Production
PC
DM
codeigniter输出
test
FC
CA
HOR
MO
TSM
Sys Dev
Acc M
MD
PC
DM
Finance Department
Human Resources Department (HR)
IT Department
Sales Department
Production
Chief Executive Officer (CEO)
Board of Directors
建议
答案 0 :(得分:2)
你在返回递归堆栈之前echo
结果,所以你一直走到你的层次结构中的一片叶子,回应那片叶子,回来并回显父母,等等。你应该return $stringBuilder
。然后你需要调用代码到echo getHierarchy()
。
或者,只需像displayMenu
中那样立即回复所有内容,而不是构建字符串。