首页 / PHP / 遍历数组作为PHP中的树
遍历数组作为PHP中的树
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了遍历数组作为PHP中的树,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2144字,纯文字阅读大概需要4分钟。
内容图文
我有一个描述层次结构的db表.这是结构
id | pid | uid
1 5 2
2 2 3
3 2 4
4 2 6
5 3 7
在树结构中它会看起来像这样.这只是一个例子,它们可能是更多的节点.
2
/ | 3 4 6
/
7
所以在php和mysql中我获取所有数据并将其保存到数组中.
我想遍历该数组以确定例如特定级别的id的数量,我希望能够从一个级别检索所有节点.
我怎么能在PHP中这样做?
编辑
这就是我创建数组的方式:
foreach ( $resultSet as $row ) {
$entry = array();
$entry['id'] = $row->id;
$entry['uid'] = $row->uid;
$entry['rid'] = $row->rid;
$entry['date'] = $row->date;
$entries [] = $entry;
}
这就是我现在使用答案创建树的方法
$tree = array();
foreach($entries as $key){
$this->adj_tree($tree, $key);
}
return $tree;
但是当我打印$tree时,我得到一些奇怪的输出
Array ( [24] => Array ( [id] => 6 [uid] => 24 [rid] => 83 [date] => 2011-06-15
17:54:14 ) [] => Array ( [_children] => Array ( [0] => Array ( [id] => 6 [uid] => 24
[rid] => 83 [date] => 2011-06-15 17:54:14 ) [1] => Array ( [id] => 6 [uid] => 24 [rid] =>
83 [date] => 2011-06-15 17:54:14 ) ) ) )
但实际上应该有一个父母用24的uid和两个孩子的82和83
解决方法:
你没有说你是如何使用你的表,但我想这是一个商店类别树,或类似的东西,即一个不需要任何复杂存储的小数据集.您可以立即阅读整个表格并使用php动态构建树形结构.它是这样的
function adj_tree(&$tree, $item) {
$i = $item['uid'];
$p = $item['pid'];
$tree[$i] = isset($tree[$i]) ? $item + $tree[$i] : $item;
$tree[$p]['_children'][] = &$tree[$i];
}
例:
$tree = array();
$rs = my_query("SELECT * FROM categories");
while($row = my_fetch($rs))
adj_tree($tree, $row);
最后,您将获得一个项目数组,每个项目包含“_children”子数组,而这些子数组又包含对其他项的引用(或为空).
完整示例,包含问题数据
$entries = array(
array('id' => 1, 'pid' => 5, 'uid' => 2),
array('id' => 2, 'pid' => 2, 'uid' => 3),
array('id' => 3, 'pid' => 2, 'uid' => 4),
array('id' => 4, 'pid' => 2, 'uid' => 6),
array('id' => 5, 'pid' => 3, 'uid' => 7),
);
$tree = array();
foreach($entries as $row)
adj_tree($tree, $row);
function print_tree($node, $indent) {
echo str_repeat('...', $indent) . $node['uid'], "<br>\n";
if(isset($node['_children']))
foreach($node['_children'] as $child)
print_tree($child, $indent + 1);
}
print_tree($tree[2], 0);
内容总结
以上是互联网集市为您收集整理的遍历数组作为PHP中的树全部内容,希望文章能够帮你解决遍历数组作为PHP中的树所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。