-
遞迴選單資料:
首選我們需要在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)方法詳解:
老郭部落格:laughing:
個人部落格地址:https://www.phpsix.com