Excel 表格格式如图:
通过PHPExcel导入之后拿到如下图数据:
目标是生成新的数组,数组是同pid的存放在其父数组下(使用无限级分类算法),代码如下:
// 无限分类算法
function generateTree($data){
$items = array();
foreach($data as $v){
$items[$v['id']] = $v;
}
$tree = array();
foreach($items as $k => $item){
if(isset($items[$item['pid']])){
$items[$item['pid']]['son'][] = &$items[$k];
}else{
$tree[] = &$items[$k];
}
}
return $tree;
}
拿到分类后的新数组¥tree,如图
下一步目标是把该数组存进数据库,由于son级数未定,无法采取定量入库方式,下面是递归入库方式:
//递归入库
public function digui_db($arr,$pid = 0)
{
$data['type'] = 's';
$data['name'] = $arr['name'];
$data['sort'] = $arr['sort'];
$data['pid'] = $pid;
$pid = db('category')->insertGetId($data); //博主是TP5,此处获取pid为了递归传给son使用
if(count($arr['son'])>0)
{
for ($i=0; $i < count($arr['son']); $i++)
{
$this->digui_db($arr['son'][$i],$pid);
}
}
}
主函数第一次调用:
for ($i=0; $i < count($tree); $i++) {
$this->digui_db($tree[$i]);//第一层进库的pid为0
}
有更好的方法,欢迎交流!