【发布时间】:2015-03-10 09:53:04
【问题描述】:
用 Kohana 框架编写的 Gleez 项目我正在使用它来学习。 我对以下代码的工作方式有一些疑问。 它用于根据给定的信息生成树,然后递归函数使用这个生成的树来创建结构。
我将查询结果 $tree 提供给包含 父母 id = pid 循环遍历每个项目,检查是否设置了 pid(使用 isset),如果设置了,则将空数组 $d['children'] 添加到当前项目。引用用于在 foreach 循环中更改项目的值。
-
我的问题是为什么要使用引用,因为即使 isset 为 false 空数组 $d['children'] 也会被添加?我想我只是不明白这个功能的用途。 2.为什么我没有引用的简化函数仍然添加 $item['children'] where pid = Null
private function generate_tree($tree) { $menu = array(); $ref = array(); foreach($tree as $d) { $d['children'] = array(); if(isset($ref[$d['plid']])) { // we have a reference on its parent $ref[ $d['plid'] ]['children'][ $d['mlid'] ] = $d; $ref[ $d['mlid'] ] =& $ref[ $d['plid'] ]['children'][ $d['mlid'] ]; } else { // we don't have a reference on its parent => put it a root level $menu[$d['mlid']] = $d; $ref[$d['mlid']] =& $menu[$d['mlid']]; // both pointing to the mlid } } return $menu;}
我简化了函数,只添加了 $item['children'];如果设置了父 ID,则结果为 $tree。 我给 generate_tree 函数提供了这些参数。
array(4){
[0]=> array(2)
{
["id"]=> string(1) "2"
["pid"]=> NULL
}
[1]=> array(2)
{
["id"]=> string(1) "3"
["pid"]=> NULL
}
[2]=> array(2)
{
["id"]=> string(1) "6"
["pid"]=> string(1) "2"
}
[3]=> array(2)
{
["id"]=> string(1) "8"
["pid"]=> string(1) "3"
}
}
private function generate_tree($menu) {
$tree = array();
foreach ($menu as $item) {
$item['children'] = array();
if (isset($tree[$item['pid']])){
$tree[$item['pid']['children']] = $item;
}
else{
$tree[$item['pid']] = $item;
}
}
return $tree;
}
$tree 的输出。如您所见,["pid"]=> Null,但仍然添加了 $item['children']。
array(3) {
[""]=> array(3)
{
["id"]=> string(1) "3"
["pid"]=> NULL
["children"]=> array(0) { }
}
[2]=> array(3)
{
["id"]=> string(1) "6"
["pid"]=> string(1) "2"
["children"]=> array(0) { }
}
[3]=> array(3)
{
["id"]=> string(1) "8"
["pid"]=> string(1) "3"
["children"]=> array(0) { }
}
}
提前谢谢你!
【问题讨论】:
-
您是否尝试过删除引用并检查如果这样做会发生什么?有时最好只是见证发生的事情:)
-
是的,我确实简化了代码,删除了引用,我
-
我会纠正我的问题,因为这是我的第一个问题,我认为它不是最好的。
-
我认为这是一个有效的问题,您对引用的使用感到困惑。检查发生情况的最佳方法是将其删除,然后查看结果。
标签: php foreach reference kohana