有时我们在写无限极分类时,需要根据列表,
将子分类放到父分类中,这是就需要我们进行循环操作。
这网上找了一个不错的函数,这里根据自己的需求做了修改。
记录一下,便于以后使用:
方法一:
/**
* [list_to_tree 无限极分类树状图]
* @param [type] $lists [列表]
* @param string $childKey [子集名称]
* @param string $id [主键ID]
* @param string $pid [父子关联ID]
* @return [type] [description]
*/
function list_to_tree($lists, $childKey = 'children', $id = 'id', $pid = 'pid'){
$items = [];
$tree = [];
foreach($lists as &$item){
// 获取出每一条数据的父id
$ipid = &$item[$pid];
// 将每一个item的引用保存到$items中
$items[$item[$id]] = &$item;
// 如果在map中没有设置过他的pid, 说明是根节点, pid为0,
if (isset($items[$ipid])) {
// 如果在map中没有设置过他的pid, 则将该item加入到他父亲的叶子节点中
$pItem = &$items[$ipid];
$pItem[$childKey][] = &$item;
} else {
// 将pid为0的item的引用保存到$tree中
$tree[$item[$id]] = &$item;
}
}
return $tree;
}
方法二:
/**
* [list_to_tree 无限极分类树状图]
* @param [type] $lists [列表]
* @param string $childKey [子集名称]
* @param string $id [主键ID]
* @param string $pid [父子关联ID]
* @return [type] [description]
*/
public function list_to_tree($lists, $childKey = 'children', $id = 'id', $pid = 'pid')
{
$items = [];
foreach ($lists as $v) {
$items[$v[$id]] = $v;
}
$tree = [];
foreach ($items as $id => $item) {
if (isset($items[$item[$pid]])) {
$items[$item[$pid]][$childKey] = &$items[$id];
} else {
$tree[] = &$items[$id];
}
}
return $tree;
}
本文为冯奎原创文章,转载无需和我联系,但请注明来自冯奎博客fengkui.net
最新评论