企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
> 现在我们先来一个无限极分类的函数。我们在Application下新建一个Cate/Model目录,把它写在Model目录中。 作为调试我们先不用把Thinkphp的类库放到base.php或者是Common.php中,CateModel.php中我们封装底层php函数,在Controller.php写业务代码。 我们来引用一个think\db\query->order函数,看看他是怎么写的 > /** > * 指定排序 order('id','desc') 或者 order(['id'=>'desc','create_time'=>'desc']) > * @access public > * @param string|array $field 排序字段 > * @param string $order 排序 > * @return $this > */ > public function order($field, $order = null) > { > if (!empty($field)) { > if (is_string($field)) { > if (!empty($this->options['via'])) { > $field = $this->options['via'] . '.' . $field; > } > $field = empty($order) ? $field : [$field => $order]; > } elseif (!empty($this->options['via'])) { > foreach ($field as $key => $val) { > if (is_numeric($key)) { > $field[$key] = $this->options['via'] . '.' . $val; > } else { > $field[$this->options['via'] . '.' . $key] = $val; > unset($field[$key]); > } > } > } > if (!isset($this->options['order'])) { > $this->options['order'] = []; > } > if (is_array($field)) { > $this->options['order'] = array_merge($this->options['order'], $field); > } else { > $this->options['order'][] = $field; > } > } > return $this; > } 然后我们发现这个order函数是能用mysql的查询方法。没有办法显示我们更高的逼格的排序算法,后台将就着先用。 <?php namespace app\admin\Model; use think\Model; class Cate extends Model { /** * 逆序读取id * @return [type] [description] */ public function cateTree() { $data = $this->order('id desc')->select(); return $this->reSort( $data); } /** * 将数组分化成树 * @param [type] $data 传入的链接 * @param integer $pid 父类id * @param integer $level 树层级 * @return [array] cate树 */ public function reSort($data, $pid = 0, $level = 0){ static $listTree = array(); foreach( $data as $key => $value) { if( $value['pid'] == $pid) { $value['level'] = $level; $listTree[] = $value; unset( $data[$key]); $this->reSort( $data, $value['id'], $level+1); } } return $listTree; } /** * 取得父节点的children */ public function getChildId( $cates, $cateid) { static $list = array(); foreach( $cates as $key => $value) { if ( $value['id'] == $cateid) { $listTree = $value['id']; $this->getChildId( $cates, $value['id']); } } return $list; } }