php laravel 排序,Laravel - 菜单递归及排序

谭骏
2023-12-01

递归菜单数据:

首选我们需要在 app\Repositories\Eloquent\MenuRepository.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 - 将项目按照字符串比较

 类似资料: