获取面包屑的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> » ".$name."";
}
return "<a href='index.php'>Admin</a> » <a href='index.php?folder_id=$id'>".$name."</a> » ";
} 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> »";
}
}
函数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);”而不是返回“>>”;虽然没有像原来那样工作,但经过一点调整后,它开始工作了。我在原来的问题上添加了新代码。非常感谢!虽然没有像原来那样工作,但经过一点调整后,它开始工作了。我在原来的问题上添加了新代码。非常感谢!就我个人而言,我更愿意为循环使用实际的,并将特例作为最后一个元素。就我个人而言,我更愿意为
循环使用实际的,并将特例作为最后一个元素。