如何突破PHP面包屑循环?

问题描述 投票:0回答:1

我正在使用以下功能来显示数组中的类别面包屑

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));

Array:

$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汽车零件->发动机相关->发动机油


我无法解决此问题,如果有人会提供解决方案来解决此问题,我将不胜感激。

php arrays breadcrumbs
1个回答
1
投票
我以不使用静态变量的方式重写了您的方法(如果您不太谨慎的话,很容易导致错误)。

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 }

© www.soinside.com 2019 - 2024. All rights reserved.