Конвертировать PHP Массив категорий в HTML хлебные крошки для нескольких подкатегорий - PullRequest
1 голос
/ 09 января 2020

У меня есть 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

I пытался сделать панировочные сухари, используя { ссылка }

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. Показывает

Моторное масло -> Связанное с двигателем -> Автозапчасти для внедорожников

вместо того, что я хочу, чтобы это было похоже,

Автозапчасти внедорожника -> Связанные с двигателем -> Моторное масло

Я также попробовал этот подход { ссылка } Кажется, чтобы решить обе мои проблемы ... однако это не создает хлебные крошки для одного родителя одного ребенка.

Автозапчасти седана -> Связанные с двигателем

Отображается только при

Родительская категория -> Дочерняя категория -> Дочерняя категория

Буду признателен, если кто-нибудь даст какое-либо решение для устранения этих проблем.


Ожидаемый результат составит

Автозапчасти для внедорожников -> Двигатель -> Моторное масло

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

Или только для одной детской категории;

Седан автозапчасти -> Двигатель

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

1 Ответ

0 голосов
/ 10 января 2020

Решение для # 1

Кредиты @IncredibleHat

с заменой

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

на

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

дает выход Моторное масло -> Двигатель -> Внедорожник Автозапчасти

<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

Использование PHP функции массива под названием array_reverse https://www.php.net/manual/en/function.array-reverse.php

заменить

return $result;

на

return array_reverse($result);

Теперь вывод будет; Внедорожник автозапчасти -> Двигатель -> Моторное масло

<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>
...