获取面包屑的PHP递归函数

获取面包屑的PHP递归函数,php,parent-child,recursive-query,Php,Parent Child,Recursive Query,花了几个小时在这上面,需要一些专家的帮助 我有一张这样的桌子: [id] [name] [parent_id] 1 fruits 0 2 orange 1 3 lemon 2 4 steak 0 当我去lemon时,我希望面包屑是这样的: 主页>水果>橙子>柠檬 柠檬不是一个环节,而是其他环节 有什么建议吗 我发现最好的是这个,但它使一切成为一个链接 function createPath($id, $category_tbl) {

花了几个小时在这上面,需要一些专家的帮助

我有一张这样的桌子:

[id] [name] [parent_id]
1    fruits  0
2    orange  1
3    lemon   2
4    steak   0
当我去lemon时,我希望面包屑是这样的:

主页>水果>橙子>柠檬

柠檬不是一个环节,而是其他环节

有什么建议吗

我发现最好的是这个,但它使一切成为一个链接

    function createPath($id, $category_tbl) {

        $s = "SELECT * FROM ".$category_tbl." WHERE ID = $id";
        $r = mysql_query($s);
        $row = mysql_fetch_array($r);

        if($row['parent_id'] == 0) {
            $name = $row['name'];
            return "<a href='index.php'>Admin</a> > <a href='index.php?folder_id=$id'>".$name."</a> > ";
        } else {
            $name = $row['name'];
            return createPath($row['parent_id'],$category_tbl). " <a href='index.php?folder_id=$id'>".$name."</a> >";
        }
    }
$targetID = 3; //Lemon
foreach( $breadcrumb_items as $breadcrumb ){
...
   if( $breadcrumb['id'] != $targetID ){ //if the id does not match our target id
      //add link code
   }
...
}
函数createPath($id,$category\u tbl){
$s=“从“$category\u tbl.”中选择*,其中ID=$ID”;
$r=mysql\u查询($s);
$row=mysql\u fetch\u数组($r);
如果($row['parent_id']==0){
$name=$row['name'];
返回“>>”;
}否则{
$name=$row['name'];
返回createPath($row['parent_id',$category_tbl)。“>”;
}
}
下面来自欧文的回答给了我使它工作所需的东西

function createPath($id, $category_tbl, $except = null) {
    $s = "SELECT * FROM ".$category_tbl." WHERE ID = $id";
    $r = mysql_query($s);
    $row = mysql_fetch_array($r);
    if($row['parent_id'] == 0) {
        $name = $row['name'];
        if(!empty($except) && $except == $row['id']) {
            return "<a href='index.php'>Admin</a> &raquo; ".$name."";
        }
        return "<a href='index.php'>Admin</a> &raquo; <a href='index.php?folder_id=$id'>".$name."</a> &raquo; ";
    } else {
        if(!empty($except) && $except == $row['id']) {
            $name = $row['name'];
            return createPath($row['parent_id'],$category_tbl, false). " $name";
        } 
        $name = $row['name'];
        return createPath($row['parent_id'],$category_tbl, false). " <a href='index.php?folder_id=$id'>".$name."</a> &raquo;";
    }
}
函数createPath($id,$category\u tbl,$except=null){
$s=“从“$category\u tbl.”中选择*,其中ID=$ID”;
$r=mysql\u查询($s);
$row=mysql\u fetch\u数组($r);
如果($row['parent_id']==0){
$name=$row['name'];
如果(!empty($except)&&$except==$row['id']){
返回“»;”$name。”;
}
返回“»;”;
}否则{
如果(!empty($except)&&$except==$row['id']){
$name=$row['name'];
返回createPath($row['parent\u id',$category\u tbl,false)。“$name”;
} 
$name=$row['name'];
返回createPath($row['parent\u id',$category\u tbl,false)。“»;”;
}
}

创建一个数组并在那里缓冲结果,而不是及时输出。在数组被
createPath()
填充后,您可以通过一个for循环输出面包屑,该循环知道最后一个元素是哪一个(通过
count()
),并且可以避免将其链接出来。

创建一个数组并在那里缓冲结果,而不是及时输出它。在数组被
createPath()
填充后,您可以通过一个for循环输出面包屑,该循环知道最后一个元素是哪个(通过
count()
),并且可以避免将其链接出来。

该代码不是向后获得结果吗
柠檬>橙子>水果>主页
?正如joni所建议的,我将结果放入一个数组中,然后构建输出字符串

如果数据库中有您需要的其他信息,例如除了
文件夹_id=$id
之外的url,您可以将其存储为

$breadcrumb_items = array(
      0 => array( 'id' => '3', 
                  'title' => 'Lemon', 
                  'url' => 'LemonURL'
                ),
      1 => array( 'id' => '2', 
                  'title' => 'Orange', 
                  'url' => 'OrangeURL'
                ),
      2 => array( 'id' => '1', 
                  'title' => 'Fruit', 
                  'url' => 'FruitURL'
                ),
      3 => array( 'id' => '0', 
                  'title' => 'Home', 
                  'url' => 'HomeURL'
                )
);
然后调用
array\u reverse
修复数组顺序,并构建html。确保设置一个标志,以防止最后一项进入链接

    function createPath($id, $category_tbl) {

        $s = "SELECT * FROM ".$category_tbl." WHERE ID = $id";
        $r = mysql_query($s);
        $row = mysql_fetch_array($r);

        if($row['parent_id'] == 0) {
            $name = $row['name'];
            return "<a href='index.php'>Admin</a> > <a href='index.php?folder_id=$id'>".$name."</a> > ";
        } else {
            $name = $row['name'];
            return createPath($row['parent_id'],$category_tbl). " <a href='index.php?folder_id=$id'>".$name."</a> >";
        }
    }
$targetID = 3; //Lemon
foreach( $breadcrumb_items as $breadcrumb ){
...
   if( $breadcrumb['id'] != $targetID ){ //if the id does not match our target id
      //add link code
   }
...
}

这段代码不是向后得到结果吗
Lemon>Orange>Fruits>Home
?正如joni所建议的,我将结果放入一个数组中,然后构建输出字符串

如果数据库中有您需要的其他信息,例如除了
文件夹_id=$id
之外的url,您可以将其存储为

$breadcrumb_items = array(
      0 => array( 'id' => '3', 
                  'title' => 'Lemon', 
                  'url' => 'LemonURL'
                ),
      1 => array( 'id' => '2', 
                  'title' => 'Orange', 
                  'url' => 'OrangeURL'
                ),
      2 => array( 'id' => '1', 
                  'title' => 'Fruit', 
                  'url' => 'FruitURL'
                ),
      3 => array( 'id' => '0', 
                  'title' => 'Home', 
                  'url' => 'HomeURL'
                )
);
然后调用
array\u reverse
修复数组顺序,并构建html。确保设置一个标志,以防止最后一项进入链接

    function createPath($id, $category_tbl) {

        $s = "SELECT * FROM ".$category_tbl." WHERE ID = $id";
        $r = mysql_query($s);
        $row = mysql_fetch_array($r);

        if($row['parent_id'] == 0) {
            $name = $row['name'];
            return "<a href='index.php'>Admin</a> > <a href='index.php?folder_id=$id'>".$name."</a> > ";
        } else {
            $name = $row['name'];
            return createPath($row['parent_id'],$category_tbl). " <a href='index.php?folder_id=$id'>".$name."</a> >";
        }
    }
$targetID = 3; //Lemon
foreach( $breadcrumb_items as $breadcrumb ){
...
   if( $breadcrumb['id'] != $targetID ){ //if the id does not match our target id
      //add link code
   }
...
}

添加第三个参数,它将是假定不会呈现到标记中的链接的名称

function createPath($id, $category_tbl, $except = null) {

    $s = "SELECT * FROM ".$category_tbl." WHERE ID = $id";
    $r = mysql_query($s);
    $row = mysql_fetch_array($r);

    if($row['parent_id'] == 0) {
        $name = $row['name'];  
        return "<a href='index.php'>Admin</a> > <a href='index.php?folder_id=$id'>".$name."</a> > ";
    } else {
        $name = $row['name'];
        if(!empty($except) && $except == $name)
            return createPath($row['parent_id'],$category_tbl, $except)." ".$name;
        }
        return createPath($row['parent_id'],$category_tbl, $except). " <a href='index.php?folder_id=$id'>".$name."</a> >";
    }
}
函数createPath($id,$category\u tbl,$except=null){
$s=“从“$category\u tbl.”中选择*,其中ID=$ID”;
$r=mysql\u查询($s);
$row=mysql\u fetch\u数组($r);
如果($row['parent_id']==0){
$name=$row['name'];
返回“>>”;
}否则{
$name=$row['name'];
如果(!empty($except)&&$except==$name)
返回createPath($row['parent\u id',$category\u tbl,$except)。“”.$name;
}
返回createPath($row['parent_id',$category_tbl,$except)。“>”;
}
}

添加第三个参数,该参数将是假定不会呈现到标记中的链接的名称

function createPath($id, $category_tbl, $except = null) {

    $s = "SELECT * FROM ".$category_tbl." WHERE ID = $id";
    $r = mysql_query($s);
    $row = mysql_fetch_array($r);

    if($row['parent_id'] == 0) {
        $name = $row['name'];  
        return "<a href='index.php'>Admin</a> > <a href='index.php?folder_id=$id'>".$name."</a> > ";
    } else {
        $name = $row['name'];
        if(!empty($except) && $except == $name)
            return createPath($row['parent_id'],$category_tbl, $except)." ".$name;
        }
        return createPath($row['parent_id'],$category_tbl, $except). " <a href='index.php?folder_id=$id'>".$name."</a> >";
    }
}
函数createPath($id,$category\u tbl,$except=null){
$s=“从“$category\u tbl.”中选择*,其中ID=$ID”;
$r=mysql\u查询($s);
$row=mysql\u fetch\u数组($r);
如果($row['parent_id']==0){
$name=$row['name'];
返回“>>”;
}否则{
$name=$row['name'];
如果(!empty($except)&&$except==$name)
返回createPath($row['parent\u id',$category\u tbl,$except)。“”.$name;
}
返回createPath($row['parent_id',$category_tbl,$except)。“>”;
}
}

您在从表中检索数据或创建html时遇到问题吗?我在用PHP创建html时遇到问题。。。如何使面包屑中的最后一个项目不是一个链接。你知道我刚刚意识到。。。使用CSS伪元素可能比后端更容易做到这一点。比如,您在从表中检索数据或创建html时遇到问题吗?我在PHP中创建html时遇到问题。。。如何使面包屑中的最后一个项目不是一个链接。你知道我刚刚意识到。。。使用CSS伪元素可能比后端更容易做到这一点。嗯。。如何将其输出为数组?类似于“$list[]=array('id'=>$id,'name'=>$name);”而不是返回“>>”;隐马尔可夫模型。。如何将其输出为数组?类似于“$list[]=array('id'=>$id,'name'=>$name);”而不是返回“>>”;虽然没有像原来那样工作,但经过一点调整后,它开始工作了。我在原来的问题上添加了新代码。非常感谢!虽然没有像原来那样工作,但经过一点调整后,它开始工作了。我在原来的问题上添加了新代码。非常感谢!就我个人而言,我更愿意为循环使用实际的
,并将特例作为最后一个元素。就我个人而言,我更愿意为
循环使用实际的
,并将特例作为最后一个元素。