您好,欢迎访问一九零五行业门户网

发布两个不用递归的树形数组构造函数,该如何处理

发布两个不用递归的树形数组构造函数
发布两个不用递归的树形数组构造函数
php code/** * 创建父节点树形数组 * 参数 * $ar 数组,邻接列表方式组织的数据 * $id 数组中作为主键的下标或关联键名 * $pid 数组中作为父键的下标或关联键名 * 返回 多维数组 **/function find_parent($ar, $id='id', $pid='pid') { foreach($ar as $v) $t[$v[$id]] = $v; foreach ($t as $k => $item){ if( $item[$pid] ){ if( ! isset($t[$item[$pid]]['parent'][$item[$pid]]) ) $t[$item[$id]]['parent'][$item[$pid]] =& $t[$item[$pid]]; } } return $t;}/** * 创建子节点树形数组 * 参数 * $ar 数组,邻接列表方式组织的数据 * $id 数组中作为主键的下标或关联键名 * $pid 数组中作为父键的下标或关联键名 * 返回 多维数组 **/function find_child($ar, $id='id', $pid='pid') { foreach($ar as $v) $t[$v[$id]] = $v; foreach ($t as $k => $item){ if( $item[$pid] ) { $t[$item[$pid]]['child'][$item[$id]] =& $t[$k]; } } return $t;}
示例
php code$data = array( array('id'=>1, 'parent'=>0, 'name'=>'祖父'), array('id'=>2, 'parent'=>1, 'name'=>'父亲'), array('id'=>3, 'parent'=>1, 'name'=>'叔伯'), array('id'=>4, 'parent'=>2, 'name'=>'自己'), array('id'=>5, 'parent'=>4, 'name'=>'儿子'),);$p = find_parent($data, 'id', 'parent');$c = find_child($data, 'id', 'parent');
------解决方案--------------------
谢谢分享。
------解决方案--------------------
版主辛苦了,多谢分享
------解决方案--------------------
谢谢版主。。学习了。。
------解决方案--------------------
版主的示例写错了一点点 $data;
------解决方案--------------------
数据结构中的id去掉岂不是更好 不仅少一次循环 还从语法层面拒绝了id重复的可能
php codefunction find_child($ar, $pid='pid') { foreach ($ar as $k => $item){ if( $item[$pid] ) { $ar[$item[$pid]]['child'][$k] = &$ar[$k]; } } return $ar;}function find_parent($ar,$pid='pid') { foreach ($ar as $k => $item){ if( $item[$pid] ){ if( ! isset($ar[$item[$pid]]['parent'][$item[$pid]]) ) $ar[$k]['parent'][$item[$pid]] =& $ar[$item[$pid]]; } } return $ar;}
------解决方案--------------------
前排就座,参观学习
------解决方案--------------------
这两个函数对数组的顺序有要求:
可以试一下:
$data = array(
array('id'=>5, 'parent'=>4, 'name'=>'d'),
array('id'=>1, 'parent'=>0, 'name'=>'x'),
array('id'=>2, 'parent'=>1, 'name'=>'y'),
array('id'=>3, 'parent'=>1, 'name'=>'z'),
array('id'=>4, 'parent'=>2, 'name'=>'c'),
);
或者:
$data = array(
array('id'=>1, 'parent'=>0, 'name'=>'a'),
array('id'=>2, 'parent'=>1, 'name'=>'b'),
array('id'=>3, 'parent'=>5, 'name'=>'c'),
array('id'=>4, 'parent'=>2, 'name'=>'d'),
array('id'=>5, 'parent'=>1, 'name'=>'e'),
);
$data = array(
array('id'=>1, 'parent'=>0, 'name'=>'1'),
array('id'=>2, 'parent'=>1, 'name'=>'11'),
array('id'=>3, 'parent'=>5, 'name'=>'12'),
array('id'=>4, 'parent'=>2, 'name'=>'111'),
array('id'=>5, 'parent'=>1, 'name'=>'1111'),
);
------解决方案--------------------
,,奥妙在于 &
注意函数名find_parent, find_child,并非构造整个上下级树
------解决方案--------------------

其它类似信息

推荐信息