построить родительскую дочернюю категорию breadcrumb из многомерного массива php - PullRequest
0 голосов
/ 15 мая 2018

помогите мне построить динамическую функцию для отображения любого количества подкатегорий. На данный момент существует только три уровня категории. пожалуйста, помогите мне создать код для обработки любого количества подкатегорий для одного родителя и для отображения его в виде хлебных крошек.

Ниже приведена функция индекса codeigniter, получающая все категории из таблицы категорий

<code>public function index() {
    $dbdata['table'] = 'categories';
    $dbdata['select'] = array('id', 'parent', 'name');
    $dbdata['where'] = array('type' => 'post');
    $records = $this->ot->get_records($dbdata);
    $category = array();
    foreach ($records as $record) {
        if ($record['parent']) {
            $parent = $this->get_parent($record['parent'], $records);
            if ($parent['parent']) {
                $super_parent = $this->get_parent($parent, $records);
                $category[] = $super_parent['name'] . ' > ' . $parent['name'] . ' > ' . $record['name'];
            } else {
                $category[] = $parent['name'] . ' > ' . $record['name'];
            }
        } else {
            $category[] = $record['name'];
        }
    }
    echo '
<pre>';
    print_r($records);
    echo '<hr>';
    print_r($category);
    echo '
'; } защищенная функция get_parent ($ parent, $ records) { $ key = array_search ($ parent, array_column ($ records, 'id')); вернуть $ records [$ key]; }

Полученный результат:

Array
(
    [0] => Array
    (
        [id] => 1
        [parent] => 0
        [name] => Category 1
    )
    [1] => Array
    (
        [id] => 2
        [parent] => 1
        [name] => Category 2
    )
    [2] => Array
    (
        [id] => 3
        [parent] => 2
        [name] => Category 3
    )
    [3] => Array
    (
        [id] => 4
        [parent] => 0
        [name] => Category 4
    )
    [4] => Array
    (
        [id] => 5
        [parent] => 4
        [name] => Category 5
    )
    [5] => Array
    (
        [id] => 6
        [parent] => 0
        [name] => Category 6
    )
    [6] => Array
    (
        [id] => 7
        [parent] => 0
        [name] => Category 7
    )
    [7] => Array
    (
        [id] => 8
        [parent] => 0
        [name] => Category 8
    )
    [8] => Array
    (
        [id] => 9
        [parent] => 0
        [name] => Category 9
    )
    [9] => Array
    (
        [id] => 10
        [parent] => 0
        [name] => Category 10
    )
    [10] => Array
    (
        [id] => 11
        [parent] => 0
        [name] => Category 11
    )
    [11] => Array
    (
        [id] => 12
        [parent] => 0
        [name] => Category 12
    )
)
Array
(
    [0] => Category 1
    [1] => Category 1 > Category 2
    [2] => Category 1 > Category 2 > Category 3
    [3] => Category 4
    [4] => Category 4 > Category 5
    [5] => Category 6
    [6] => Category 7
    [7] => Category 8
    [8] => Category 9
    [9] => Category 10
    [10] => Category 11
    [11] => Category 12
)

1 Ответ

0 голосов
/ 15 мая 2018

Попробуйте этот код

public function index() {
            $dbdata['table'] = 'categories';
            $dbdata['select'] = array('id', 'parent', 'name');
            $dbdata['where'] = array('type' => 'post');
            $records = $this->ot->get_records($dbdata);

            for ($i = 0; $i < sizeof($records); $i++) {
                $records[$i]['category'] = $this->category($records, 0, $records[$i]);
            }
        }

        function category($records, $parent = 0, $record = NULL) {
            if ($record) {
                $parent = '';
                if ($record['parent']) {
                    $parent = $this->category($records, $record['parent']);
                }
                return $parent . $record['name'];
            } else {
                $super_parent = '';
                $key = array_search($parent, array_column($records, 'id'));
                if ($records[$key]['parent']) {
                    $super_parent = $this->category($records, $records[$key]['parent']);
                }
                $super_parent .= $records[$key]['name'] . ' / ';
                return $super_parent;
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...