从汉诺塔上写递归
需求: 求出每一级的数量,但是父级+子级的所有数量。
比如 第一级本身数量为1 而子级是2 ,那么相加就是3,但是2级还有3级,就需要再加上3级。依次类推到最后一级数量之和就是这个分类的总数量。
实现的思路:
1:我们需要找到自身的数量.
2.1:我们找到自身的下一级所有数量相加 ,返回数量.
2.2:子级再去调用方法1,这样最后累加。
代码:
class Test { public static function getAllData() { echo '<pre>'; $data=[]; self::_getData($data,'1'); var_dump($data);exit; } //获取自身+子级 private static function _getData(&$data,$id) { $item = self::_getDataById($id); if ($item==null) { return 0; } array_push($data,$item); $tem_key = count($data)-1; $child_amount = 0; $child_item= self::_getChildrenData($id); foreach ($child_item as $item) { $amount = self::_getData($data,$item['id']); $child_amount +=$amount; } $data[$tem_key]['amount']+=$child_amount; return $data[$tem_key]['amount']; } //获取自身 private static function _getDataById($id) { $sql='SELECT * FROM category WHERE id=:id'; $cmd = \Yii::$app->db->createCommand($sql); $cmd->bindValue(':id', $id); return $cmd->queryOne(); } //获取子级 private static function _getChildrenData($id) { $sql='SELECT * FROM category WHERE parent_id=:id'; $cmd = \Yii::$app->db->createCommand($sql); $cmd->bindValue(':id', $id); return $cmd->queryAll(); } }
部分结构:
男儿立志出乡关 学不成名誓不还