直接上代码
public function getoptions(){
$arr = Db::name('product_category')->field('id,cate_name,pid')->where('is_show',1)->select();
$data = $this->get_tree($arr,0);
$menu = [];
foreach ($data as $k => $v) {
if(isset($v['child'])){
$menu_ = $this->get_menu($v['child'],$v['cate_name']);
array_push($menu, $menu_);
}else{
$menu_[$k]['value'] = $v['cate_name'];
$menu_[$k]['label'] = $v['id'];
array_push($menu, $menu_);
}
}
$return = [];
foreach ($menu as $key => $value) {
$return = array_merge($return,$value);
}
//去重
$arr = array_map("unserialize", array_unique(array_map("serialize", $return)));
return $arr;//最终结果
}
public function get_tree($arr, $pid=0){
//$arr为你查询出的数组
if (!is_array($arr)) {
return false;
}
$tree = [];
foreach ($arr as $k => $v) {
if ($v['pid'] == $pid) {
$v['child'] = $this->get_tree($arr, $v['id']);
// 最后一级下没有子级销毁child的
if(empty($v['child'])){
unset($v['child']);
}
$tree[] = $v;
}
}
return $tree;
}
public function get_menu($child,$value){
$menu= [];
foreach ($child as $kk => $vv) {
$menu[$kk]['value'] = $value.'=>'.$vv['cate_name'];
$menu[$kk]['label'] = $vv['id'];//若要获取每一级的ID可像value一样去拼接,这里给的是最后一级的id
if(isset($vv['child'])){
$menu = $this->get_menu($vv['child'],$menu[$kk]['value']);
}
}
return $menu;
}
执行结果
array(86) {
[0] => array(2) {
["value"] => string(26) "营养滋补=>群岛海参"
["label"] => int(56)
}
[1] => array(2) {
["value"] => string(20) "营养滋补=>三七"
["label"] => int(118)
}
[2] => array(2) {
["value"] => string(23) "营养滋补=>藏红花"
["label"] => int(120)
}
[3] => array(2) {
["value"] => string(20) "营养滋补=>天麻"
["label"] => int(121)
}
[4] => array(2) {
["value"] => string(23) "营养滋补=>西洋参"
["label"] => int(122)
}
[5] => array(2) {
["value"] => string(20) "营养滋补=>燕窝"
["label"] => int(134)
}
[6] => array(2) {
["value"] => string(20) "营养滋补=>阿胶"
["label"] => int(135)
}
..................
[80] => array(2) {
["value"] => string(49) "线下地推=>业务员线下地推=>地推首单"
["label"] => int(2066)
}
[81] => array(2) {
["value"] => string(49) "线下地推=>业务员线下地推=>地推复购"
["label"] => int(2067)
}
[82] => array(2) {
["value"] => string(44) "退换无忧A=>退换无忧a=>退换无忧aa"
["label"] => int(2072)
}
[83] => array(2) {
["value"] => string(44) "退换无忧B=>退换无忧b=>退换无忧bb"
["label"] => int(2075)
}