首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何突破PHP面包屑循环?

如何突破PHP面包屑循环?
EN

Stack Overflow用户
提问于 2020-01-10 10:55:04
回答 1查看 136关注 0票数 0

我使用以下函数显示数组中的类别面包屑

代码语言:javascript
运行
复制
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);
}

由下列组织召集:

代码语言:javascript
运行
复制
echo implode(' -> ',breadcrumber(array_column($category,NULL,'id'),4));

阵列:

代码语言:javascript
运行
复制
$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汽车零部件->发动机相关->发动机油

我无法解决这个问题,我很感激有人会给我解决这个问题的办法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-10 11:16:27

当您在函数中声明静态变量时,它会永远记住它的值。在您的第一个调用中,它可以正常工作,因为$result是空的。当您第二次调用它时,第一次调用的结果仍然存在,新的结果只是附加在后面。这就是面包屑越来越长的原因。

我以一种不使用静态变量的方式重写了您的方法(如果您不小心的话,这很容易导致错误)。

代码语言:javascript
运行
复制
function breadcrumber($array, $id)
{
    if (!isset($array[$id])) return [];

    $result = [];
    $result[] = $array[$id]['name'];  // store title text
    $parent = $array[$id]['parentID'];  // assign new target
    unset($array[$id]);  // remove possibility of an infinite loop

    // prepend the recursion result to the already existing results (effectively replacing the array_reverse)
    return array_merge(breadcrumber($array, $parent), $result);  // recurse
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59680282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档