我正在尝试创建一个从db中读取多个(page_id,page_title)的函数,这是我递归的。函数应该为所有现有页面制作缩进的嵌套UL-s,就像树一样,并且正在这样做。当我尝试消除递归循环中的重复时问题就开始了。出于某种原因,in_array不能正常工作,或者我错过了一些东西。我在PHP5.5.1.2上工作。 谁知道这里的问题是什么? 我的代码现在是:
function nav($page_set,$pages,$count){
echo "<ul>";
while ($page = mysqli_fetch_array($page_set)) {
if(!in_array($page['page_id'],$pages)){
echo "<li><a href=\"content.php?page=" . urlencode($page['page_id']) . "\">{$page["page_title"]}</a></li>";
if (!is_null(get_pages($page['page_id'])))
{
$pages[$count]=$page['page_id'];
$count++;
nav(get_pages($page['page_id']),$pages,$count);
}
}
}
echo "</ul>";
}
function get_pages($page_id){
global $connection;
$query = "SELECT page.page_id, page.page_parent, page.page_meny_position, page_lang_content.page_title FROM page JOIN page_lang_content ON page.page_id=page_lang_content.page_id ";
if (isset($page_id))
{
$query .= " WHERE page.page_parent = ".$page_id;
}
$query .= " ORDER BY `page`.`page_id` ASC ";
$page_set = mysqli_query($connection,$query);
confirm_query($page_set);
return $page_set;
}
AND函数调用:
<?php echo nav(get_pages(NULL),$pages=array(),$count=0)?>
答案 0 :(得分:0)
我没有对此进行测试,但我认为你仍然会得到重复项,因为你实际上并没有将所有page_id存储在$ pages变量中,这样所有处理过的page_id都可以在所有的递归轮次中使用。您需要在递归中返回$ pages数组以确保它包含所有已处理的值(我还删除了计数值,因为它似乎没有任何意义):
function nav($page_set,$pages)
{
echo "<ul>";
while ($page = mysqli_fetch_array($page_set))
{
if(!in_array($page['page_id'],$pages))
{
echo "<li><a href=\"content.php?page=" . urlencode($page['page_id']) . "\">{$page["page_title"]}</a></li>";
if (!is_null(get_pages($page['page_id'])))
{
$pages[]=$page['page_id'];
$pages = nav(get_pages($page['page_id']),$pages);
}
}
}
echo "</ul>";
return $pages;
}
类似地修改了函数调用
<?php echo nav(get_pages(NULL),$pages=array())?>