亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

PHP array_multisort() 函數的深入解析

2020-03-22 20:13:41
字體:
來源:轉載
供稿:網友
一、先看最簡單的情況。有兩個數組:
$arr1 = array(1,9,5);
$arr2 = array(6,2,4);
array_multisort($arr1,$arr2);
print_r($arr1); // 得到的順序是1,5,9
print_r($arr2); // 得到的順序是6,4,2
我估計兩個數組的值自始至終都是對應著的:1對應6,9對應2,5對應4。
我們再加多一個數組看看會怎樣:
$arr1 = array(1,9,5);
$arr2 = array(6,2,4);
$arr3 = array(3,7,8);
array_multisort($arr1,$arr2,$arr3);
查看結果,1自始至終都對應6對應3,其它項也是如此。這種對應關系就是手冊中所謂的“排序時保留原有的鍵名關聯”。
另外也可以把每個數組想像成數據庫表的一列。而對應著的1,6,3為一數據行,9,2,7為另一數據行。。。
array_multisort會先按第一個數組(想像成列)排序,如果第一個數組(列)的值相同,則按第二個數組(列)排序。
具體可以用下面的程式來測試:
$arr1 = array(1,9,5,9);
$arr2 = array(6,2,4,1);
$arr3 = array(3,7,8,0);
array_multisort($arr1,$arr2,$arr3);
可以想像這里$arr3的結果是(3,8,0,7)。二、接下來講解array_multisort的參數。這個函數的參數很靈活。最簡單的情況是如上面所示的以1個或n個數組作為參數,需要注意的是每個數組的項數要一樣,否則會warning導致排序失效。
像這樣array_multisort($arr1,$arr2,$arr3); 默認是所有數組都是升序排列,如果想對$arr2降序,并當作字符串去比較,就要寫成:
array_multisort($arr1, $arr2, SORT_DESC, SORT_STRING, $arr3);
每個array后面可以跟一個排序順序標志或一個排序類型標志,或者兩種標志同時出現。但是每種排序標志在每個數組后面只能出現一個。
詳細如下:
排序順序標志:
SORT_ASC - 按照上升順序排序(默認)
SORT_DESC - 按照下降順序排序
排序類型標志:
SORT_REGULAR - 將項目按照通常方法比較(默認)
SORT_NUMERIC - 將項目按照數值比較
SORT_STRING - 將項目按照字符串比較三、最后是array_multisort有什么實際作用。
我們通常有一些多維數組需要排序:
復制代碼 代碼如下:
$guys = Array
(
[0] = Array
(
[name] = jake
[score] = 80
[grade] = A
)
[1] = Array
(
[name] = jin
[score] = 70
[grade] = A
)
[2] = Array
(
[name] = john
[score] = 80
[grade] = A
)
[3] = Array
(
[name] = ben
[score] = 20
[grade] = B
)
)

例如我們想按成績倒序排列,如果成績相同就按名字的升序排列。
這時我們就需要根據$guys的順序多弄兩個數組出來:
$scores = array(80,70,80,20);
$names = array('jake','jin','john','ben');
然后
array_multisort($scores, SORT_DESC, $names, $guys);就行了
還能不能更靈活一點呢,每次想排序都要另外弄些數組出來嗎?
其實在qeephp的helper_array類里面已經封裝得很好,下面是它的兩個方法,需要的人自己修改一下就可以用了:
復制代碼 代碼如下:
/**
* 根據指定的鍵對數組排序
*
* 用法:
* @code php
* $rows = array(
*array('id' = 1, 'html' target='_blank'>value' = '1-1', 'parent' = 1),
*array('id' = 2, 'value' = '2-1', 'parent' = 1),
*array('id' = 3, 'value' = '3-1', 'parent' = 1),
*array('id' = 4, 'value' = '4-1', 'parent' = 2),
*array('id' = 5, 'value' = '5-1', 'parent' = 2),
*array('id' = 6, 'value' = '6-1', 'parent' = 3),
* );
*
* $rows = Helper_Array::sortByCol($rows, 'id', SORT_DESC);
* dump($rows);
* // 輸出結果為:
* // array(
* // array('id' = 6, 'value' = '6-1', 'parent' = 3),
* // array('id' = 5, 'value' = '5-1', 'parent' = 2),
* // array('id' = 4, 'value' = '4-1', 'parent' = 2),
* // array('id' = 3, 'value' = '3-1', 'parent' = 1),
* // array('id' = 2, 'value' = '2-1', 'parent' = 1),
* // array('id' = 1, 'value' = '1-1', 'parent' = 1),
* // )
* @endcode
*
* @param array $array 要排序的數組
* @param string $keyname 排序的鍵
* @param int $dir 排序方向
*
* @return array 排序后的數組
*/
static function sortByCol($array, $keyname, $dir = SORT_ASC)
{
return self::sortByMultiCols($array, array($keyname = $dir));
}
/**
* 將一個二維數組按照多個列進行排序,類似 SQL 語句中的 ORDER BY
*
* 用法:
* @code php
* $rows = Helper_Array::sortByMultiCols($rows, array(
*'parent' = SORT_ASC,
*'name' = SORT_DESC,
* ));
* @endcode
*
* @param array $rowset 要排序的數組
* @param array $args 排序的鍵
*
* @return array 排序后的數組
*/
static function sortByMultiCols($rowset, $args)
{
$sortArray = array();
$sortRule = '';
foreach ($args as $sortField = $sortDir)
{
foreach ($rowset as $offset = $row)
{
$sortArray[$sortField][$offset] = $row[$sortField];
}
$sortRule .= '$sortArray[/'' . $sortField . '/'], ' . $sortDir . ', ';
}
if (empty($sortArray) || empty($sortRule)) { return $rowset; }
eval('array_multisort(' . $sortRule . '$rowset);');
return $rowset;
}

PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产在线观看精品| 97在线观看免费高清| 欧美高清视频一区二区| 中文字幕一区电影| 日韩**中文字幕毛片| 久久99亚洲精品| 91麻豆桃色免费看| 亚洲人成在线播放| 国内揄拍国内精品少妇国语| 国产精品欧美亚洲777777| 日韩av成人在线| 亚洲第五色综合网| 欧洲美女7788成人免费视频| 国产欧美婷婷中文| 九九精品视频在线观看| 欧美激情手机在线视频| 午夜精品一区二区三区av| 成人观看高清在线观看免费| 日韩欧美在线中文字幕| 欧美日韩不卡合集视频| 欧美日韩中文字幕日韩欧美| 欧美大全免费观看电视剧大泉洋| 91国语精品自产拍在线观看性色| 国产在线久久久| 亚洲色图狂野欧美| 91精品免费久久久久久久久| 色综合亚洲精品激情狠狠| 日韩欧美亚洲范冰冰与中字| 成人精品视频在线| 欧美在线视频在线播放完整版免费观看| 日韩成人av网址| 日韩精品极品在线观看| 富二代精品短视频| 国产亚洲欧美视频| 精品视频在线导航| 国产成人+综合亚洲+天堂| 亚洲天堂第一页| 一区二区三区日韩在线| 美乳少妇欧美精品| 欧美日韩精品国产| 亚洲国产高清高潮精品美女| 久久影院中文字幕| 欧美成人精品一区二区| 91大神在线播放精品| 在线播放国产精品| 丰满岳妇乱一区二区三区| 国产日韩欧美日韩大片| 国产97在线|亚洲| 欧美韩国理论所午夜片917电影| 一本大道久久加勒比香蕉| 亚洲天堂成人在线视频| 在线亚洲国产精品网| 国产福利精品av综合导导航| 亚洲精品电影在线| 成人福利在线视频| 欧美激情亚洲综合一区| 性色av一区二区三区红粉影视| 亚洲精品国产免费| 亚洲一区二区在线播放| 国产日韩在线视频| 亚洲国产精品yw在线观看| 欧美福利视频在线观看| 亚洲图片在线综合| 日韩美女av在线| 国产999在线| 国产福利视频一区二区| 国内精品小视频在线观看| 亚洲国产成人精品电影| 国产欧美精品一区二区| 日韩免费电影在线观看| 亚洲精品福利在线| 欧美激情亚洲视频| 中文一区二区视频| 91av在线国产| 欧美性一区二区三区| 成人激情av在线| 精品国产乱码久久久久久天美| 欧美激情在线观看视频| 亚洲男人第一av网站| 欧美一区二区三区艳史| 日韩久久精品成人| 精品欧美国产一区二区三区| 亚洲精品福利视频| 久久国产精品久久国产精品| 欧美国产日韩xxxxx| 成人激情黄色网| 菠萝蜜影院一区二区免费| 欧美俄罗斯乱妇| 久久精品国产清自在天天线| 成人xxxxx| 国内外成人免费激情在线视频网站| 91精品视频播放| 国产一区二区三区视频免费| 精品久久久国产精品999| 日韩欧美一区二区三区久久| 国产精品7m视频| 久久国内精品一国内精品| 亚洲成人在线视频播放| 日本精品久久中文字幕佐佐木| 九九热这里只有精品6| 成人有码在线播放| 欧美孕妇孕交黑巨大网站| 国产亚洲欧美一区| 日韩精品在线播放| 97在线观看视频| 日韩欧美在线免费观看| 亚洲欧洲第一视频| 日韩av成人在线观看| 日韩欧美一区二区三区久久| 亚洲欧美日韩天堂| 日韩在线观看你懂的| 国产精品福利观看| 亚洲美女av在线播放| 欧美亚洲激情在线| 亚洲欧美激情精品一区二区| 另类专区欧美制服同性| 亚洲欧美制服另类日韩| 欧美色图在线视频| 欧美精品www在线观看| 欧美在线视频观看| 亚洲欧美综合v| 国产丝袜精品第一页| 国产精品亚洲片夜色在线| 日韩精品视频观看| 日韩在线观看免费av| 亚洲精品视频免费在线观看| 欧美高清在线视频观看不卡| 日韩中文在线中文网在线观看| 亚洲国产精品久久久久秋霞蜜臀| 国产欧美精品xxxx另类| 日韩电视剧在线观看免费网站| 久久久久一本一区二区青青蜜月| 欧美激情三级免费| 亚洲娇小xxxx欧美娇小| 国产精品三级网站| 国产激情久久久久| 欧美国产精品日韩| 亚洲精品国偷自产在线99热| 在线视频国产日韩| 久久综合色影院| 最新69国产成人精品视频免费| 日韩欧美一区视频| www国产精品com| 久久九九有精品国产23| 中文字幕久热精品在线视频| 91九色综合久久| 国产成人97精品免费看片| 亚洲国产日韩欧美综合久久| 在线观看精品自拍私拍| 久久香蕉国产线看观看网| 爽爽爽爽爽爽爽成人免费观看| 91黑丝在线观看| 中文字幕日韩在线观看| 国产精品无av码在线观看| 国产精品99久久久久久人| 成人美女免费网站视频| 久久久久九九九九| 九九久久精品一区| 欧美激情亚洲视频| 国产日韩在线视频| 全色精品综合影院| 国产精品精品久久久久久| 国产精品美腿一区在线看| 亚洲最新中文字幕|