PHP面试题目

29个成员

无限极分类

发表于 2015-12-12 1936 次查看

有一分类表,分别有三个字段,自动ID(id),分类名(category_name),父ID(pid),父ID为当前分类所属于上级分类的id,父ID为0时,表示没有上给分类,查询结果如下:

$category = array(
 
     array(
     'id'=>'1',
     'cate_name'=>'新闻',
     'pid'=>'0',
     ),
     array(
     'id'=>'2',
     'cate_name'=>'国内新闻',
     'pid'=>'1',
     ),
     array(
     'id'=>'3',
     'cate_name'=>'社会新闻',
     'pid'=>'2',
     ),
     array(
     'id'=>'4',
     'cate_name'=>'军事新闻',
     'pid'=>'2',
     ),
     array(
     'id'=>'5',
     'cate_name'=>'国外新闻',
     'pid'=>'1',
     ),

);

写一个方法,把当前数组转换成多维数组,实现子分类在归在父分类之下。

比如:

$category = array(
 
     array(
     'id'=>'1',
     'cate_name'=>'新闻',
     'pid'=>'0',
     'son'=>array(
            array(
             'id'=>'2',
             'cate_name'=>'国内新闻',
             'pid'=>'1',
             'son'=>array(
                    array(
                     'id'=>'3',
                     'cate_name'=>'社会新闻',
                     'pid'=>'2',
                     ),
              )
             ),   
      )
);

6回复
  • 2楼 八重宝涵 2015-12-12

    public function category($array){
            $new_arr  = array();
             foreach($array as $key=>$v){
                 if($v['pid'] == 0){
                     $new_arr['id']        =  $v['id'];
                    $new_arr['cate_name'] =  $v['cate_name'];
                    $new_arr['pid']       =  $v['pid'];
                 }
                $arr2  = array();
                foreach($array as $key=>$v){
                    if($v['pid'] == 2){
                        $arr2[$key]['id']        =  $v['id'];
                        $arr2[$key]['cate_name'] =  $v['cate_name'];
                        $arr2[$key]['pid']       =  $v['pid'];
                     }
                }
                if($v['pid'] == 1){
                     $new_arr['son'][$key]['id']        =  $v['id'];
                    $new_arr['son'][$key]['cate_name'] =  $v['cate_name'];
                    $new_arr['son'][$key]['pid']       =  $v['pid'];
                    $new_arr['son'][$key]['son']       =  $arr2;
                 }
                
            
            }
            print_r($new_arr);
        }

  • 3楼 祝你好运 2015-12-12

    <link href="/assets/libs/gallery2/bootstrap/3.1.1/css/bootstrap.css?4.9.3" rel="stylesheet" />

    中  ?4.9.3我没有用过,是什么意思

  • 4楼 福娃 2015-12-14

    $category = array(
         array(
         'id'=>'1',
         'cate_name'=>'新闻',
         'pid'=>'0',
         ),
         array(
         'id'=>'2',
         'cate_name'=>'国内新闻',
         'pid'=>'1',
         ),
         array(
         'id'=>'3',
         'cate_name'=>'社会新闻',
         'pid'=>'2',
         ),
         array(
         'id'=>'4',
         'cate_name'=>'军事新闻',
         'pid'=>'2',
         ),
         array(
         'id'=>'5',
         'cate_name'=>'国外新闻',
         'pid'=>'1',
         ),
         array(
         'id'=>'6',
         'cate_name'=>'社会热点',
         'pid'=>'3',
         ),
         array(
         'id'=>'7',
         'cate_name'=>'社会关注',
         'pid'=>'3',
         ),
    );

    $new=$group=array();

    foreach ($category as $key => $value) {
         $group[$value['pid']][$value['id']]=$value;
    }
    $new[0]=$group[0];

    function xunhuan($arr,$weizhi="[0]"){
         global $new,$group;
         foreach($arr as $k=>$v){
             if($son=$group[$k]){
                 eval("\$new{$weizhi}[{$k}]['son']=\$son;");
                 xunhuan($son,$weizhi."[{$k}]['son']");
             }
         }
    }
    xunhuan($group[0]);
    print_r('<pre>');
    print_r($new[0]);

  • 5楼 朕扮皇 2015-12-14

    <?php
    $category = array(
         array(
         'id'=>'1',
         'cate_name'=>'新闻',
         'pid'=>0,
         ),
         array(
         'id'=>'2',
         'cate_name'=>'国内新闻',
         'pid'=>1,
         ),
         array(
         'id'=>'3',
         'cate_name'=>'社会新闻',
         'pid'=>2,
         ),
         array(
         'id'=>'4',
         'cate_name'=>'军事新闻',
         'pid'=>2,
         ),
         array(
         'id'=>'5',
         'cate_name'=>'国外新闻',
         'pid'=>1,
         ),
    );

    class Cate{
        public function category($cate,$pid=0){
            $arr = array();
            foreach ($cate as $k=>$v){
                if($v['pid']==$pid){
                    $arr[$k] = $v;
                    $arr[$k]['son'] = self::category($cate,$v['id']);
                }
            }
            return $arr;
        }
    }

    $a = new Cate();
    $b = $a->category($category,$pid);
    echo '<pre>'.print_r($b,true).'</pre>';

    ?>

  • 6楼 福娃大师兄 2015-12-16

    <?php

    $category = array(
        array('id'=>'1','cate_name'=>'新闻','pid'=>'0'),
        array('id'=>'2','cate_name'=>'国内新闻','pid'=>'1'),
        array('id'=>'3','cate_name'=>'社会新闻','pid'=>'2'),
        array('id'=>'4','cate_name'=>'军事新闻','pid'=>'2'),
        array('id'=>'5','cate_name'=>'国外新闻','pid'=>'1'),
        array('id'=>'6','cate_name'=>'社会热点','pid'=>'3'),
        array('id'=>'7','cate_name'=>'社会关注','pid'=>'3'),
    );

     class Tree {
        public function fibTree($arr, $pid = 0) {
            $tree = array();
            $temp = array();
            if($arr) {
                foreach($arr as $k=>$v) {
                    if($v['pid'] == $pid) {
                        $temp = $this->fibTree($arr, $v['id']);
                        $temp AND $v['son'] = $temp;
                        $tree[] = $v;
                    }
                }
            }
            return $tree;
        }     
     }
     $newArr = new Tree();
     print_r($newArr->fibTree($category));

    ?>

  • 7楼 福娃 2015-12-17

    大师兄,师父被妖怪抓走了

发表回复
你还没有登录,请先登录注册

加入我们吧,一起学习QQ群516033298