【发布时间】:2015-08-12 00:44:20
【问题描述】:
我正在尝试使用包含类别信息的数据库。项目之间的关系仅以 parent_id 的形式存在。 我知道我可以做一些“变通办法”来达到目标,但必须有更好的解决方案。我可以将更多信息写入数据库,例如深度,但我确信有一个我不知道的循环/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;
}
}
}
}
我会为每一次朝着正确方向的努力感到高兴。谢谢!
【问题讨论】:
-
它似乎与that question 重复。
-
谢谢!这会重定向到:dba.stackexchange.com/questions/7147/…,这很有趣。当我有解决方案和工作代码时,我会在这里发布。
标签: php loops for-loop categories