Я пытаюсь работать с базой данных, содержащей информацию о категории. Связь между элементами присутствует только в виде parent_id. Я знаю, что могу сделать некоторые «обходные пути», чтобы достичь цели, но должно быть лучшее решение. Я мог бы написать дополнительную информацию в базу данных, такую как глубокость, но я уверен, что есть комбинация loop/array_filter, о которой я не знаю.Цитирование по категориям и построение дерева категорий с использованием родительского идентификатора
Это то, что у меня есть:
Array
(
[0] => Array
(
[id] => 0
[parent_id] => 0
[title] => All
)
[1] => Array
(
[id] => 23
[parent_id] => 0
[title] => Nature
)
[2] => Array
(
[id] => 3
[parent_id] => 4
[title] => Thriller
)
[3] => Array
(
[id] => 4
[parent_id] => 0
[title] => Drama
)
[4] => Array
(
[id] => 1
[parent_id] => 0
[title] => Crime
)
[5] => Array
(
[id] => 19
[parent_id] => 23
[title] => Documentation
)
[6] => Array
(
[id] => 20
[parent_id] => 23
[title] => Coverage
)
[7] => Array
(
[id] => 21
[parent_id] => 19
[title] => Isles
)
Это то, что я хочу:
Array
(
[0] => Array
(
[id] => 0
[parent_id] => 0
[title] => All
[0] => Array
(
[id] => 23
[parent_id] => 0
[title] => Nature
[0] => Array
(
[id] => 19
[parent_id] => 23
[title] => Documentation
[0] => Array
(
[id] => 21
[parent_id] => 19
[title] => Isles
)
)
[1] => Array
(
[id] => 20
[parent_id] => 23
[title] => Coverages
)
)
[1] => Array
(
[id] => 4
[parent_id] => 0
[title] => Drama
[0] => Array
(
[id] => 3
[parent_id] => 4
[title] => Thriller
)
)
[2] => Array
(
[id] => 1
[parent_id] => 0
[title] => Crime
)
)
Я попробовал его с петлями и array_filter(), но она не работает. Я пробовал его с помощью цикла внутри функции и вызывал функцию в одном цикле, но он не работал. Затем я начал пробовать его только с 1 подкатегорией, но это не может быть решением или обходным путем.
$categories = [see first code block]
$i = -1;
$j = -1;
foreach ($categories as $cat) {
$i++;
if ($cat['parent_id'] > 0) {
$j = -1;
foreach ($categories as $cat2) {
$j++;
if ($cat2['id'] == $cat['parent_id']) {
$categories[$j][] = array("id" => $cat['id'], "parent_id" => $cat['parent_id'], "title" => $cat['title']);
unset($categories[$i]);
continue 2;
}
}
}
}
Я был бы рад за каждый толчок в правильном направлении. Благодаря!
Кажется, дубликат [этого вопроса] (http://stackoverflow.com/questions/10646833/using-mysql-query-to-traverse-rows-to-make-a-recursive-tree). –
thx! Это перенаправляет на это: http://dba.stackexchange.com/questions/7147/find-highest-level-of-a-chitectical-field-with-vs-without-ctes/7161#7161 , что очень интересно. Когда у меня есть решение и рабочий код, я отправлю его здесь. – Seba