【问题标题】:Convert PHP Array of categories to HTML breadcrumbs for multiple sub categories将 PHP 类别数组转换为多个子类别的 HTML 面包屑
【发布时间】:2020-01-09 18:27:24
【问题描述】:

我有一个这样的 PHP 类别数组

$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 auto parts
-- Engine Related
---- Spark Plugs
---- Engine Oil
-- Body Related 
Sedan auto parts
-- Engine Related

我正在尝试使用https://stackoverflow.com/a/48598077/12677030 制作面包屑

function breadcrumber($array,$id){
    static $result=[];  // declare the storage variable without losing elements during recursion
    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 $result;
}

echo implode(' -> ',breadcrumber(array_column($category,NULL,'id'),4));

小功能,很好用,但是...

  1. 我不知道用 HTML /category.php?id=
  2. 显示它
  3. 显示

发动机油 -> 发动机相关 -> SUV 汽车零件

而不是我想要的,

SUV 汽车配件 -> 发动机相关 -> 机油

我也尝试过这种方法https://stackoverflow.com/a/52571259/12677030 似乎解决了我的两个问题..但是这不会为一个父母一个孩子生成面包屑。

轿车零部件 -> 发动机相关

仅在

时显示

父类别 -> 子类别 -> 子类别

如果有人能提供任何解决方案来纠正这些问题,我将不胜感激。


预期输出将是

SUV auto Parts -> Engine Related -> Engine Oil

<a href="/category/1">SUV auto Parts</a> -> <a href="/category/2">Engine Related</a> -> <a href="/category/4">Engine Oil</a>

或仅用于一个子类别;

Sedan auto Parts -> Engine Related

   <a href="/category/6">Sedan auto Parts</a> -> <a href="/category/7">Engine Related</a>

【问题讨论】:

  • 我认为他的问题 1. 关于 HTML,他是否想将面包屑名称包装在 &lt;a&gt; 锚标记中,并插入 url 和类别 ID。仅使用implode 就相当困难。
  • 尽管将$result[]=$array[$id]['name']; 更改为$result[]='&lt;a href="/category.php?id='. $array[$id]['id'] .'"&gt;'. $array[$id]['name'] .'&lt;/a&gt;'; 之类的内容可能会如您所愿?
  • @ggorlen 我希望输出类似于&lt;a href="/category/1"&gt;SUV auto Parts&lt;/a&gt; -&gt; &lt;a href="/category/2"&gt;Engine Related&lt;/a&gt; -&gt; &lt;a href="/category/4"&gt;Engine Oil&lt;/a&gt; 或者当我访问“引擎相关”下的项目时将类似于&lt;a href="/category/6"&gt;Sedan auto Parts&lt;/a&gt; -&gt; &lt;a href="/category/7"&gt;Engine Related&lt;/a&gt;
  • @IncredibleHat 效果很好,第一个问题解决了。我很感激。
  • 你说的“我无法显示”是什么意思?到目前为止,您尝试过什么?

标签: php arrays recursion breadcrumbs


【解决方案1】:

#1 的解决方案

感谢@IncredibleHat

替换

$result[]=$array[$id]['name'];

$result[]='<a href="/category.php?id='. $array[$id]['id'] .'">'. $array[$id]['name'] .'</a>';

给出输出 Engine Oil -> Engine Related -> SUV auto Parts

<a href="/category.php?id=4">Engine Oil</a> -> <a href="/category.php?id=2">Engine Related</a> -> <a href="/category.php?id=1">SUV auto Parts</a>

#2 的解决方案

使用名为 array_reverse 的 PHP 数组函数 https://www.php.net/manual/en/function.array-reverse.php

替换

return $result;

return array_reverse($result);

现在,输出将是; SUV auto Parts -> Engine Related -> Engine Oil

<a href="/category.php?id=1">SUV auto Parts</a> -> <a href="/category.php?id=2">Engine Related</a> -> <a href="/category.php?id=4">Engine Oil</a>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多