我一直在试图解决这个问题,但我一无所获。希望有人能来拯救我。
我的问题是我正在使用邻接列表数据模型在 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 便携式电子产品(必须包括选定的家长)
- 7 个 Mp3 播放器(儿童)
- 8 CD 播放机(儿童)
- 9 2 路收音机(儿童)
- 10 闪光(孙子)
如果 Flash 有孩子,它也会返回这些孩子。
因此,最终结果将返回一个类似于上面的数组,但仅包含这些项目。
请注意:
我不是在寻找一个创建树结构多维数组的函数(已经找到了解决方案)。我想构建一个函数: fetch_recursive($id) ,它接收 ID 并返回该级别中的所有项目,在下面的级别等等。
希望这可以帮助
提前致谢
Edit:
我之前发布了一个解决方案,可以根据您提供的输出构建多维数组,以及获取特定的所有子元素的方法id
从那个特定的数组中。我现在已经弄清楚如何直接从输出中检索子元素(无需首先通过buildtree()
功能:
function fetch_recursive($src_arr, $currentid, $parentfound = false, $cats = array())
{
foreach($src_arr as $row)
{
if((!$parentfound && $row['id'] == $currentid) || $row['parent_id'] == $currentid)
{
$rowdata = array();
foreach($row as $k => $v)
$rowdata[$k] = $v;
$cats[] = $rowdata;
if($row['parent_id'] == $currentid)
$cats = array_merge($cats, fetch_recursive($src_arr, $row['id'], true));
}
}
return $cats;
}
要使用上面的函数,只需传入输出数组即可$data
对于第一个参数和id
您想要从第二个参数中检索子元素:
ex.:
$list = fetch_recursive($data, 3);
这应该给你正确的数组结构id
3
(如本答案最后一个代码框中的示例所示)。
原答案:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)