php专区

 首页 > php专区 > PHP应用 > CMS建站 > PHP中递归函数返回值使用介绍(ecshop无限分类) -

PHP中递归函数返回值使用介绍(ecshop无限分类) -

分享到:
【字体:
导读:
          一款以ecshop无限分类为实例来介绍一下php中的递归函数返回值的问题介绍,在 ecshop 二次开发中做产品分类索引时,要根据分类 id 取得所...

PHP中递归函数返回值使用介绍(ecshop无限分类)

一款以ecshop无限分类为实例来介绍一下php中的递归函数返回值的问题介绍,在 ecshop 二次开发中做产品分类索引时,要根据分类 id 取得所属顶级分类 id,第一个反应就是用递归递出来,于是写了递归函数如下:

  1. function getCatTopId($cat_id
  2.     if ($cat_id
  3.     { 
  4.         $res = Array(); 
  5.         $sql = 'SELECT cat_id, parent_id' 
  6.              . ' FROM ' . $GLOBALS['ecs']->table('category')  
  7.              . ' WHERE cat_id = ' . $cat_id . ' AND is_show = 1'
  8.         $res = $GLOBALS['db']->getAll($sql); 
  9.         if ($res[0]['parent_id'] > 0) 
  10.         { 
  11.             getCatTopId($res[0]['parent_id']); 
  12.         } 
  13.         else 
  14.         { 
  15.             return $res[0]['cat_id']; 
  16.         } 
  17.     } 
  18.     else 
  19.     { 
  20.         return 1; 
  21.     } 

一测试程序,没有得到返回值?检查了很久都没有发现错误,看来脑壳断路了,今天问水神(一好心网友)时,他帮我解答出来了,修改如下:

  1. function getCatTopId($cat_id
  2.     if ($cat_id
  3.     { 
  4.         $res = Array(); 
  5.         $sql = 'SELECT cat_id, parent_id' 
  6.              . ' FROM ' . $GLOBALS['ecs']->table('category')  
  7.              . ' WHERE cat_id = ' . $cat_id . ' AND is_show = 1'
  8.         $res = $GLOBALS['db']->getAll($sql); 
  9.         if ($res[0]['parent_id'] > 0) 
  10.         { 
  11.             return getCatTopId($res[0]['parent_id']); // 修改处,多写个 return ,让函数返回值 
  12.         } 
  13.         else 
  14.         { 
  15.             return $res[0]['cat_id']; 
  16.         }    } 
  17.     else 
  18.     { 
  19.         return 1; 
  20.     } 

函数写在内部,就算返回了,也只是返回到内部的那个函数的位置,所以外面还有一层主函数,必须再 return 一下

分享到:
Ecshop系统添加免运费赠品后购物车变为收...
Ecshop系统添加免运费赠品后购物车变为收取运费解决办法 使用商城的朋友可能会经常碰到关于利用ecshop来实现一些活动的需求,把电影票设置为免运费,但是事实情况却事与愿违,消费者购买订单超过100元并添加免运费的赠品后,订单反而又要收取邮费. flow.php,代码如下: /* 添加赠品到购物...
ecshop后台登录超时session过期的解决办...
ecshop后台登录超时session过期的解决办法 可能有不少用户会发现自己的ecshop经常会使用关就超时了,这个问题解决办法有很多种,我们可以直接在ecsho中进行修改,具体方法如下,在includescls_session.php中修改 var $max_life_time = 1440;  // SESSION 过期时间、单位秒这段代...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……