我一直在试图解决这个问题,但一无所获。希望有人能够帮助我。
我的问题是我正在使用邻接表数据模型在mysql中生成我的分层数据。我可以将下面的表检索到一个多维数组中,并为每个项使用关联数组。我的目标是,一旦获得此数组,我想获取另一个数组,其中包括父ID下的所有节点(子节点、孙子节点等),包括父项。我只是无法弄清楚如何在php中编写此代码。
在MySQL中,我的表如下所示:
例如,如果我想要 Portable Electronics 下每个节点的关联数组,并且它们的 ID 为 3(代码中使用 ID),那么它将返回一个具有以下 ID 行的数组:
- 3 Portable Electronics(必须包括所选父级) - 7 Mp3 播放器(子级) - 8 CD 播放器(子级) - 9 双向收音机(子级) - 10 闪存(孙级)
如果 Flash 还有子级,则也会返回它们。
因此,最终结果将返回一个类似于上面的数组,但仅包含那些项。
请注意: 我不需要创建树结构的多维数组的函数(已经有解决方案了)。我想要构建一个函数:fetch_recursive($id),它接收一个 ID 并返回该级别及以下级别中的所有项目等等。
希望这可以帮助你。
提前感谢。
我的问题是我正在使用邻接表数据模型在mysql中生成我的分层数据。我可以将下面的表检索到一个多维数组中,并为每个项使用关联数组。我的目标是,一旦获得此数组,我想获取另一个数组,其中包括父ID下的所有节点(子节点、孙子节点等),包括父项。我只是无法弄清楚如何在php中编写此代码。
在MySQL中,我的表如下所示:
id name parent_id
1 Electronics 0
2 Televisions 1
3 Portable Electronics 1
4 Tube 2
5 LCD 2
6 Plasma 2
7 Mp3 Players 3
8 CD Players 3
9 2 Way Radios 3
10 Flash 7
我可以使用以下代码将所有行检索为关联数组。
$r = mysql_query("SELECT * FROM test ");
$data = array();
while($row = mysql_fetch_assoc($r)) {
$data[] = $row;
}
获得结果:
Array
(
[0] => Array
(
[id] => 1
[name] => Electronics
[parent_id] => 0
)
[1] => Array
(
[id] => 2
[name] => Televisions
[parent_id] => 1
)
[2] => Array
(
[id] => 3
[name] => Portable Electronics
[parent_id] => 1
)
[3] => Array
(
[id] => 4
[name] => Tube
[parent_id] => 2
)
[4] => Array
(
[id] => 5
[name] => LCD
[parent_id] => 2
)
[5] => Array
(
[id] => 6
[name] => Plasma
[parent_id] => 2
)
[6] => Array
(
[id] => 7
[name] => Mp3 Players
[parent_id] => 3
)
[7] => Array
(
[id] => 8
[name] => CD Players
[parent_id] => 3
)
[8] => Array
(
[id] => 9
[name] => 2 Way Radios
[parent_id] => 3
)
[9] => Array
(
[id] => 10
[name] => Flash
[parent_id] => 7
)
)
用这些结果,我想通过一个ID来筛选它。例如,如果我想要 Portable Electronics 下每个节点的关联数组,并且它们的 ID 为 3(代码中使用 ID),那么它将返回一个具有以下 ID 行的数组:
- 3 Portable Electronics(必须包括所选父级) - 7 Mp3 播放器(子级) - 8 CD 播放器(子级) - 9 双向收音机(子级) - 10 闪存(孙级)
如果 Flash 还有子级,则也会返回它们。
因此,最终结果将返回一个类似于上面的数组,但仅包含那些项。
请注意: 我不需要创建树结构的多维数组的函数(已经有解决方案了)。我想要构建一个函数:fetch_recursive($id),它接收一个 ID 并返回该级别及以下级别中的所有项目等等。
希望这可以帮助你。
提前感谢。
fetch_recursive($id)
,它接收一个ID
并返回该级别及以下所有项目。听起来像是一个简单的递归函数。你尝试过什么?我们能看到你的代码吗? - Nir Alfasi