【发布时间】:2020-01-10 10:55:04
【问题描述】:
我正在使用以下函数来显示数组中的类别面包屑
function breadcrumber($array, $id) {
// declare the storage variable without losing elements during recursion
static $result = [];
if (isset($array[$id])) { // if target exists
$result[] = $array[$id]['name']; // store title text
$parent = $array[$id]['parentID']; // assign new target
unset($array[$id]); // remove possibility of an infinite loop
breadcrumber($array, $parent); // recurse
}
return array_revers($result);
}
调用者:
echo implode(' -> ',breadcrumber(array_column($category,NULL,'id'),4));
数组:
$category = array(
1 => array(
'id' => 1,
'parentID' => 0,
'name' => 'SUV auto parts'
),
2 => array(
'id' => 2,
'parentID' => 1,
'name' => 'Engine Related'
),
3 => array(
'id' => 3,
'parentID' => 2,
'name' => 'Spark Plugs'
),
4 => array(
'id' => 4,
'parentID' => 2,
'name' => 'Engine Oil'
),
5 => array(
'id' => 5,
'parentID' => 1,
'name' => 'Body related'
),
6 => array(
'id' => 6,
'parentID' => 0,
'name' => 'Sedan auto parts'
),
7 => array(
'id' => 7,
'parentID' => 6,
'name' => 'Engine Related'
),
);
这适用于单页/项目页面
SUV 汽车配件 -> 发动机相关 -> 机油
但是,当我尝试在一个页面中显示特定类别的所有内容时,此功能会像这样输出
SUV 汽车配件 -> 发动机相关 -> 机油 -> SUV 汽车配件 -> 发动机相关 -> 机油
循环结束,
例如;我在机油下面有 3 件物品,并在小盒子的一页中显示,我希望是这样,
项目标题 1
小描述
商品价格
SUV 汽车配件 -> 发动机相关 -> 机油
项目标题 2
小描述
商品价格
SUV 汽车配件 -> 发动机相关 -> 机油
项目标题 3
小描述
商品价格
SUV 汽车配件 -> 发动机相关 -> 机油
相反,我得到的输出是
项目标题 1
小描述
商品价格
SUV 汽车配件 -> 发动机相关 -> 机油
项目标题 2
小描述
商品价格
SUV 汽车零部件 -> 发动机相关 -> 发动机油 -> SUV 汽车零部件 -> 发动机相关 -> 发动机油
项目标题 3
小描述
商品价格
SUV 汽车配件 -> 发动机相关 -> 发动机油 -> SUV 汽车配件 -> 发动机相关 -> 发动机油 -> SUV 汽车配件 -> 发动机相关 -> 发动机油
我无法解决这个问题,如果有人能提供任何解决方案来解决这个问题,我将不胜感激。
【问题讨论】:
-
在“坏”情况下如何调用面包屑导航功能?
-
在不知道如何调用函数的情况下,我会尽量不在函数内部使用静态变量,而是通过引用递归调用来传递变量
-
echo implode(' -> ',breadcrumber(array_column($category,NULL,'id'),$item['category_id']));
标签: php arrays breadcrumbs