2013-07-25 21 views
0

我有一个保存在MySQL中的多维菜单。表看起来像:从一个mysql_query打印面包屑递归

id name parent_id 

表是巨大的。我不想运行成百上千的mysql_query的(),所以我开始使用此:

$result = mysql_query("SELECT * FROM test"); 
$arrs = array(); 

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
    $arrs[] = $row; 
} 

function build_tree($arrs, $parent_id=0, $level=0) { 
    foreach ($arrs as $arr) { 
     if ($arr['parent_id'] == $parent_id) { 
      echo str_repeat("-", $level)." ".$arr['name']."<br />"; 
      build_tree($arrs, $arr['id'], $level+1); 
     } 
    } 
} 

build_tree($arrs); 

这一切正常,但我怎么修改这打印所有parent_ids每个岗位?几乎像面包屑。

+0

这是遗留应用程序吗?你不应该在新的应用程序中使用'mysql_query'。 – tadman

+0

* PSA:*本'mysql_ *'功能已废弃在PHP 5.5](http://php.net/manual/en/faq.databases.php#faq.databases.mysql.deprecated)。不建议您编写新的代码,因为这会阻止您将来升级。相反,请使用[MySQLi](http://php.net/manual/en/book.mysqli.php)或[PDO](http://php.net/manual/en/book.pdo.php)和[是一个更好的PHP开发人员](http://jason.pureconcepts.net/2012/08/better-php-developer/)。 –

+0

是的,这是一个旧项目的更新。我通常为新项目使用codeigniter框架,但感谢您的警告。 – johdah

回答

0

除了只传入一个parent_id,您可以传递一个parent_id数组。您可以在递归调用之前将当前的parent_id追加到此数组中,并在递归调用后将其删除。