你想讓多維數組排序像SQL語句的order by 一樣爽么,那就試試yii2的ArrayHelper::multisort,這貨真的挺強大的。當然,PHP自己也有一個array_multisort(),不過今天,我們只說yii2。
public static void multisort ( &$array, $key, $direction = SORT_ASC, $sortFlag = SORT_REGULAR )
首先要知道這個函數應用場景是對二維數組按列排序,它不會返回一個新數組,這從第一個參數&$array我們就可以看出,傳遞的是這個數組的索引,執行函數后,原數組將會被改變。
重點參數為$key,它接收3種形式
第一種:字符串,該類型適合于采用一個列值排序
/**
* 我們對數組$arr按照id的大小進行降序排序
*/
$arr = [
0=>['id'=>1,'name'=>'abei'],
1=>['id'=>2,'name'=>'li'],
3=>['id'=>4,'name'=>'wb'],
4=>['id'=>3,'name'=>'world']
];
ArrayHelper::multisort($arr,'id',SORT_DESC);
var_dump($arr);
// 獲得結果為
array (size=4)
0 =>
array (size=2)
'id' => int 4
'name' => string 'wb' (length=2)
1 =>
array (size=2)
'id' => int 3
'name' => string 'world' (length=5)
2 =>
array (size=2)
'id' => int 2
'name' => string 'li' (length=2)
3 =>
array (size=2)
'id' => int 1
'name' => string 'abei' (length=4)
第二種:數組,該類型適合于對多個列值進行聯合排序,當$key為數組時候,$direction如果為數組,且必須和$key數組長度一致,如果為字符串,則該字符串將作用于所有的$key.
/**
* 我們對數組$arr按照id的大小進行降序排序,然后對name進行生序排序
*/
$arr = [
0=>['id'=>1,'name'=>'abei'],
1=>['id'=>1,'name'=>'li'],
3=>['id'=>1,'name'=>'wb'],
4=>['id'=>3,'name'=>'world']
];
ArrayHelper::multisort($arr,['id','name'],[SORT_DESC,SORT_ASC]);
var_dump($arr);
// 獲得結果為
array (size=4)
0 =>
array (size=2)
'id' => int 3
'name' => string 'world' (length=5)
1 =>
array (size=2)
'id' => int 1
'name' => string 'abei' (length=4)
2 =>
array (size=2)
'id' => int 1
'name' => string 'li' (length=2)
3 =>
array (size=2)
'id' => int 1
'name' => string 'wb' (length=2)
第三種:自定義函數,當$key為一個函數時候,multisort將以這個函數的返回做作為排序的值,其他參數依舊。
/**
* 我們對數組$arr每一個子數組的id==1時,返回w,否則返回b,然后根據返回值進行降序排序
*/
$arr = [
0=>['id'=>1,'name'=>'abei'],
1=>['id'=>1,'name'=>'li'],
3=>['id'=>1,'name'=>'wb'],
4=>['id'=>3,'name'=>'world']
];
ArrayHelper::multisort($arr,function($item){
if($item['id'] == 1){
return 'w';
}else{
return 'b';
}
},SORT_DESC);
var_dump($arr);
// 獲得結果為
array (size=4)
0 =>
array (size=2)
'id' => int 1
'name' => string 'abei' (length=4)
1 =>
array (size=2)
'id' => int 1
'name' => string 'li' (length=2)
2 =>
array (size=2)
'id' => int 1
'name' => string 'wb' (length=2)
3 =>
array (size=2)
'id' => int 3
'name' => string 'world' (length=5)
第4個函數$sortFlag說明
$sortFlag共有6個值,詳情可以參考 http://php.net/manual/en/function.sort.php,
multisort將排序的值根據$sortFlag的設置轉換類型后排序。
- Yii2使用Url組件
- Yii2的Html,Request組件詳解
- YII2.0框架, 多圖片上傳功能
- yii2-imagine配置
- 有潔癖的禁止默認YII自帶垃圾代碼(個人認為)、JS、CSS(新手教程)
- Yii2 API接口輸出統一Json和jsonp格式方法
- MySql 創建表的一些語句釋義
- Yii2聯合查詢(配合GridView)
- Yii 通用系統字典
- ArrayHelper的多維數組排序函數multisort,強大無比。
- 路由規則,在Url中替換使用'/'以外的符號連接
- 從excel文件中讀取表格內容,并批量寫入數據庫
- yii2注冊時驗證用戶名、郵箱等唯一性
- Yii2最全的實戰教程
- Composer安裝yii2-imagine 壓縮,剪切,旋轉,水印
- LinkPager增加總頁數 和總記錄數
- Yii2 獲取模塊名控制器名方法名
- Yii2使用yii2-adminlte+yii2-admin左側菜單子路徑不高亮問題又解
- 前端CSS框架
- Yii2 之 frontend 子模塊實踐之一:添加前后臺子模塊
- Yii2 之 frontend 子模塊實踐之二:構建子模塊的獨立配置
- Yii2 之 frontend 子模塊實踐之三:布局和語言配置
- 完美解決ajax驗證碼不刷新問題,讓驗證碼更加美觀,不修改任何源代碼
- yii2.0 表單小部件常用的默認選中
- Yii2 controller 傳值給layout
- yii2 dropDownList 二級和三級 聯動寫法
- 微信掃碼登錄 新窗口二維碼 掃完關閉二維碼頁面 進入登錄頁面
- yii2 實現 "上一篇,下一篇" 功能
- Yii 行為簡單應用
- SQL語句