分类
<?php
class Cate
{
public function index()
{
$data = $this->getData();
$tree = $this->diedai($data);
$list = $this->setPrefix($tree, '---|');
var_dump($list);
}
protected function setPrefix($data, $prefix)
{
$list = [];
$num = 1;
$box = [0 => 1];
while ($val = current($data)) {
$key = key($data);
if (array_key_exists($val['parentid'], $box)) {
$num = $box[$val['parentid']];
} else {
if ($data[$key - 1]['parentid'] !== $val['parentid']) {
$num++;
}
}
$val['title'] = str_repeat($prefix, $num) . $val['title'];
$list[] = $val;
next($data);
}
return $list;
}
protected function getTree($cates, $pid = 0, $num = 1)
{
static $tree = [];
foreach ($cates as $k => $cate) {
if ($cate['parentid'] == $pid) {
$cate['title'] = str_repeat('---|', $num);
$tree[] = $cate;
unset($cates[$k]);
$this->getTree($cates, $cate['cateid'], $num + 1);
}
}
return $tree;
}
public function getTree2($array)
{
$items = array();
foreach ($array as $value) {
$items[$value['cateid']] = $value;
}
$tree = array();
foreach ($items as $key => $item) {
if (isset($items[$item['parentid']])) {
$items[$item['parentid']]['son'][] = &$items[$key];
} else {
$tree[] = &$items[$key];
}
}
return $tree;
}
protected function diedai($data, $id = 0)
{
$task = array($id);
$tree = array();
while (!empty($task)) {
$flag = false;
foreach ($data as $k => $v) {
if ($v['parentid'] == $id) {
$tree[] = $v;
array_push($task, $v['cateid']);
$id = $v['cateid'];
unset($data[$k]);
$flag = true;
}
}
if ($flag == false) {
array_pop($task);
$id = end($task);
}
}
return $tree;
}
protected function getData()
{
$data = array(
0 =>
array('cateid' => '1', 'title' => 'a', 'parentid' => '0', 'createtime' => '1527845919'),
1 =>
array('cateid' => '2', 'title' => 'b', 'parentid' => '0', 'createtime' => '1527845936'),
2 =>
array('cateid' => '3', 'title' => 'aa_0', 'parentid' => '1', 'createtime' => '1527845951'),
3 =>
array('cateid' => '4', 'title' => 'bb_0', 'parentid' => '2', 'createtime' => '1527845968'),
4 =>
array('cateid' => '5', 'title' => 'bb_1', 'parentid' => '2', 'createtime' => '1527846023'),
5 =>
array('cateid' => '6', 'title' => 'aa_1', 'parentid' => '1', 'createtime' => '1527846031'),
6 =>
array('cateid' => '7', 'title' => 'aa_2', 'parentid' => '1', 'createtime' => '1527850236'),
7 =>
array('cateid' => '8', 'title' => 'bb_2', 'parentid' => '2', 'createtime' => '1527850251'),
8 =>
array('cateid' => '9', 'title' => 'c', 'parentid' => '0', 'createtime' => '1527859601'),
9 =>
array('cateid' => '10', 'title' => 'cc_0', 'parentid' => '9', 'createtime' => '1527859627'),
10 =>
array('cateid' => '11', 'title' => 'd', 'parentid' => '0', 'createtime' => '1527859687'),
11 =>
array('cateid' => '12', 'title' => 'dd_0', 'parentid' => '11', 'createtime' => '1527859712',),
12 =>
array('cateid' => '13', 'title' => 'dd_1', 'parentid' => '11', 'createtime' => '1527859768',),
13 =>
array('cateid' => '14', 'title' => 'ddd', 'parentid' => '13', 'createtime' => '1527860067',),
);
return $data;
}
}
$cate = new Cate();
$cate->index();