本文章給大家整一個php 多維數組的排序實現代碼,我們在實際編碼中將會用到PHP函數array_multisort()來實現這一復雜的排序,有需要了解的朋友可參考.
如數組,代碼如下:
- Array
- (
- [0] => Array
- (
- [id] => 1146
- [orderid] => 3
- )
- [1] => Array
- (
- [id] => 1149
- [orderid] => 2
- )
- [2] => Array
- (
- [id] => 170
- [orderid] => 4
- )
- [3] => Array
- (
- [id] => 1121
- [orderid] => 3
- )
- [4] => Array
- (
- [id] => 1120
- [orderid] => 7
- )
- )
這么一個數據,想按orderid來排序,找不到內置的php函數,網上搜索了下,發現如下方法,代碼如下:
- $asc_func = create_function('$a,$b','
- $k = "orderid";
- if($a[$k] == $b[$k]) return 0;
- return $a[$k]>$b[$k]?1:-1;
- ');
- usort($arrs,$asc_func);
$arrs是原數組,$k="orderid"是要排序的字段,后來對上面代碼進行了升級,代碼如下:
- function sysSortArray($ArrayData,$KeyName1,$SortOrder1 = "SORT_ASC",$SortType1 = "SORT_REGULAR")
- {
- if(!is_array($ArrayData))
- {
- return $ArrayData;
- }
- // Get args number.
- $ArgCount = func_num_args();
- // Get keys to sort by and put them to SortRule array.
- for($I = 1;$I < $ArgCount;$I ++)
- {
- $Arg = func_get_arg($I);
- if(!eregi("SORT",$Arg))
- {
- $KeyNameList[] = $Arg;
- $SortRule[] = '$'.$Arg;
- }
- else
- {
- $SortRule[] = $Arg;
- }
- }
- // Get the values according to the keys and put them to array.
- foreach($ArrayData AS $Key => $Info)
- {
- foreach($KeyNameList AS $KeyName)
- {
- ${$KeyName}[$Key] = $Info[$KeyName];
- }
- }
- // Create the eval string and eval it.
- $EvalString = 'array_multisort('.join(",",$SortRule).',$ArrayData);';
- eval ($EvalString);
- return $ArrayData;
- }
新聞熱點
疑難解答