Laravel - 菜单递归及排序
菜单递归及排序-start
-
递归菜单数据:
首选我们需要在app\Repositories\Eloquent\MenuRepository.php
文件中编写递归程序。
详细代码:<?php namespace App\Repositories\Eloquent; use App\Repositories\Eloquent\Repository; use App\Models\Menu; use Cache; /** * 菜单仓库 */ class MenuRepository extends Repository { public function model() { return Menu::class; } /* * 递归调用菜单数据 */ public function sortMenu($menus,$pid=0) { $arr = []; if (empty($menus)) { return ''; } foreach ($menus as $key => $value) { if ($value['parent_id'] == $pid) { $arr[$key] = $value; $arr[$key]['child'] = self::sortMenu($menus,$value['id']); } } return $arr; }
然后再从控制器中调用该方法,即可实现递归菜单数据。
$menus = $this->menu->sortMenu($this->menu->all()->toArray());
-
排序子菜单并缓存:
首选我们需要在 app\Repositories\Eloquent\MenuRepository.php 文件中继续编写对子菜单进行排序的方法:/* * 排序子菜单并缓存 * --------------------------------- * array_column($array,$name) * $array => 要查询的数组 * $name => 在数组中要返回的字段值 *---------------------------------- * array_multisort($array1,$rule,$array2) * $array1 => 规定数组(规定以这个数组来排序) * $rule => 规定排列顺序。 * 可能的值: * SORT_ASC - 默认。按升序排列 (A-Z)。 * SORT_DESC - 按降序排列 (Z-A)。 * $array2 => 要规定的数组。(要排序的数组) */ public function sortMenuSetCache() { $menus = $this->model->orderBy('sort','desc')->get()->toArray(); if ($menus) { $menuList = $this->sortMenu($menus); foreach ($menuList as $key => $value) { if ($value['child']) { $sort = array_column($value['child'], 'sort'); array_multisort($sort,SORT_DESC,$value['child']); } } //缓存菜单数据 Cache::forever(config('admin.globals.cache.menuList'), $menuList); return $menuList; } return ''; }
-
PHP两个方法补充说明:
- array_column(参数1,参数2)方法详解:
返回输入数组中某个单一列的值,并以一维数组的形式返回。
参数1:要查询的数组。
参数2:在数组中要返回的字段值。
例子:$records = array( array( 'id' => 2135, 'first_name' => 'John', 'last_name' => 'Doe', ), array( 'id' => 3245, 'first_name' => 'Sally', 'last_name' => 'Smith', ), array( 'id' => 5342, 'first_name' => 'Jane', 'last_name' => 'Jones', ), array( 'id' => 5623, 'first_name' => 'Peter', 'last_name' => 'Doe', ) ); $first_names = array_column($records, 'first_name'); print_r($first_names);
以上例程会输出:
Array ( [0] => John [1] => Sally [2] => Jane [3] => Peter )
-
array_multisort(参数1,参数2,参数3)方法详解:
对多个数组或多维数组进行排序
本函数返回排序数组。您可以输入一个或多个数组。函数先对第一个数组进行排序,接着是其他数组,如果两个或多个值相同,它将对下一个数组进行排序。
参数1:规定数组(规定以这个数组来排序)
参数2:规定排列顺序。可能的值:
SORT_ASC - 默认。按升序排列 (A-Z)。
SORT_DESC - 按降序排列 (Z-A)。
参数3:要规定的数组。(要排序的数组)bool array_multisort ( array &$arr [, mixed $arg = SORT_ASC [, mixed $arg = SORT_REGULAR [, mixed $... ]]] ) 排序顺序标志: * SORT\_ASC - 按照上升顺序排序 * SORT\_DESC - 按照下降顺序排序 排序类型标志: * SORT\_REGULAR - 将项目按照通常方法比较 * SORT\_NUMERIC - 将项目按照数值比较 * SORT\_STRING - 将项目按照字符串比较
- array_column(参数1,参数2)方法详解:
菜单递归及排序-end
本作品采用《CC 协议》,转载必须注明作者和本文链接
老郭博客:laughing:
个人博客地址:www.phpsix.com