Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
495 views
in Technique[技术] by (71.8m points)

求救,php无限极分类不用递归怎么处理成层级结构?

`$arr = array(
array('id' => 1, 'pid' => 0, 'name' => '分类1'),
array('id' => 2, 'pid' => 0, 'name' => '分类2'),
array('id' => 3, 'pid' => 0, 'name' => '分类3'),
array('id' => 4, 'pid' => 2, 'name' => '分类2-1'),
array('id' => 5, 'pid' => 6, 'name' => '分类4-1'),
array('id' => 6, 'pid' => 0, 'name' => '分类4'),
array('id' => 7, 'pid' => 3, 'name' => '分类3-1'),
array('id' => 8, 'pid' => 1, 'name' => '分类1-1'),
array('id' => 9, 'pid' => 1, 'name' => '分类1-2'),
array('id' => 10, 'pid' => 5, 'name' => '分类4-1-1'),
array('id' => 11, 'pid' => 9, 'name' => '分类1-2-1'),
array('id' => 12, 'pid' => 7, 'name' => '分类3-1-1'),
array('id' => 13, 'pid' => 4, 'name' => '分类2-1-1'),
array('id' => 14, 'pid' => 3, 'name' => '分类3-2'),
array('id' => 15, 'pid' => 10, 'name' => '分类4-1-1-1')
);`

以上数组 不用递归如何处理成以下数组结构,怎么做优化?

`$newarr = array (
array ('id' => 1, 'pid' => 0, 'name' => '分类1', 'level' => 0,),
array ('id' => 8, 'pid' => 1, 'name' => '分类1-1', 'level' => 1,),
array ('id' => 9, 'pid' => 1, 'name' => '分类1-2', 'level' => 1,),
array ('id' => 11, 'pid' => 9, 'name' => '分类1-2-1', 'level' => 2,),
array ('id' => 2, 'pid' => 0, 'name' => '分类2', 'level' => 0,),
array ('id' => 4, 'pid' => 2, 'name' => '分类2-1', 'level' => 1,),
array ('id' => 13, 'pid' => 4, 'name' => '分类2-1-1', 'level' => 2,),
array ('id' => 3, 'pid' => 0, 'name' => '分类3', 'level' => 0,),
array ('id' => 7, 'pid' => 3, 'name' => '分类3-1', 'level' => 1,),
array ('id' => 12, 'pid' => 7, 'name' => '分类3-1-1', 'level' => 2,),
array ('id' => 14, 'pid' => 3, 'name' => '分类3-2', 'level' => 1,),
array ('id' => 6, 'pid' => 0, 'name' => '分类4', 'level' => 0,),
array ('id' => 5, 'pid' => 6, 'name' => '分类4-1', 'level' => 1,),
array ('id' => 10, 'pid' => 5, 'name' => '分类4-1-1', 'level' => 2,),
array ('id' => 15, 'pid' => 10, 'name' => '分类4-1-1-1', 'level' => 3,),
);`


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
/**
 * 把返回的数据集转换成Tree
 * @param array $list 要转换的数据集
 * @param string $pid parent标记字段
 * @param string $level level标记字段
 * @return array
 * @author 麦当苗儿 <[email protected]>
 */
function list_to_tree($list, $pk='id', $pid = 'pid', $child = '_child', $root = 0) {
    // 创建Tree
    $tree = array();
    if(is_array($list)) {
        // 创建基于主键的数组引用
        $refer = array();
        foreach ($list as $key => $data) {
            $refer[$data[$pk]] =& $list[$key];
        }
        foreach ($list as $key => $data) {
            // 判断是否存在parent
            $parentId =  $data[$pid];
            if ($root == $parentId) {
                $tree[] =& $list[$key];
            }else{
                if (isset($refer[$parentId])) {
                    $parent =& $refer[$parentId];
                    $parent[$child][] =& $list[$key];
                }
            }
        }
    }
    return $tree;
}

来源:https://gitee.com/liu21st/one...


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...