Построить родительскую дочернюю категорию breadcrumb из многомерного массива php
Помогите мне построить динамическую функцию для отображения любого количества подкатегорий. На данный момент существует только три уровня категории. пожалуйста, помогите мне создать код для обработки любого количества подкатегорий для одного родителя и для отображения его в виде хлебных крошек.
Ниже приведена функция индекса codeigniter для получения всех категорий из таблицы категорий.
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 '</pre>';
}
protected function get_parent($parent, $records) {
$key = array_search($parent, array_column($records, 'id'));
return $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 ответ
Решение
Попробуйте этот код
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;
}
}