我写了这样一段代码,这是一个类里面的方法
function getTopMenu($id)  {
  $map['id'] = $id ;
  $menu = $this->where($map)->find();
 //dump($menu);
  if($menu['pid'] > 0) {
    $this->getTopMenu($menu['pid']);
   } 
         return $menu ;
}
本来我想要的$menu的值是最后一次执行这个函数的结果(顶级分类),可是这个返回的是第一次执行的结果,我始终不明白这是为什么?

解决方案 »

  1.   

    这很正常呢  你又没有保存最终的返回值。这样写,试试呢。function getTopMenu($id)  {
      $map['id'] = $id ;
      $menu = $this->where($map)->find();
     //dump($menu);
      if($menu['pid'] > 0) {
        $menu = $this->getTopMenu($menu['pid']);
       } 
             return $menu ;
    }
      

  2.   

    function getTopMenu($id)  {
      $map['id'] = $id ;
      $menu = $this->where($map)->find();
     //dump($menu);
      if($menu['pid'] > 0) {
        $this->getTopMenu($menu['pid']); //2、但这里调用时没有接收返回值
       } 
             return $menu ; //1、你的方法有返回值
    }
      

  3.   

    这就要看你想要拿到什么样的结果了$menu = $this->where($map)->find();
    $menu 是一个数组
    如果  if($menu['pid'] > 0) 总是成立的话,getTopMenu 会一层一层的向下搜索
    最终应是一个级联的数组,但也可以降维成二维(或一维)数组。要看你的需要了你总得是先有期望的结果,然后再去写程序吧?
    不能是程序出什么就算是什么的!
      

  4.   

    function getTopMenu($id)  {
      $map['id'] = $id ;
      $menu = $this->where($map)->find();
     //dump($menu);
      if($menu['pid'] > 0) {
         return $this->getTopMenu($menu['pid']);//如果是取顶级的menu,加个返回
       } 
             return $menu ;
    }
      

  5.   

    你取上级数据的时候,并没有赋值www.com