從你要輸出的結(jié)果來(lái)看,你這樣實(shí)現(xiàn)法不太科學(xué),代碼不高效,數(shù)據(jù)量少時(shí)還算說(shuō)得過(guò)去,若上萬(wàn)數(shù)據(jù)的話,服務(wù)器會(huì)崩潰。建議你在數(shù)據(jù)庫(kù)結(jié)構(gòu)上進(jìn)行改進(jìn),對(duì)于排序的字段設(shè)計(jì)可以采用人為可控制的數(shù)值,這樣你要實(shí)現(xiàn)的話,一個(gè)sql語(yǔ)句搞定到數(shù)組后,你想輸出哪種格式都是可以的了。你去參考下那些知名的CMS系統(tǒng)的數(shù)據(jù)庫(kù)設(shè)計(jì)結(jié)構(gòu),我想你會(huì)受到啟發(fā)的。
創(chuàng)新互聯(lián)公司專(zhuān)注于企業(yè)成都營(yíng)銷(xiāo)網(wǎng)站建設(shè)、網(wǎng)站重做改版、皋蘭網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5網(wǎng)站設(shè)計(jì)、商城網(wǎng)站制作、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性?xún)r(jià)比高,為皋蘭等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。
記得給分?。?!
select?*?from?table?order?by?id?desc
查詢(xún)?所有?來(lái)自?table表?排序?按照?id?降序,desc?代表降序,asc?代表升序
一、先看最簡(jiǎn)單的情況。有兩個(gè)數(shù)組:
$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
我估計(jì)兩個(gè)數(shù)組的值自始至終都是對(duì)應(yīng)著的:1對(duì)應(yīng)6,9對(duì)應(yīng)2,5對(duì)應(yīng)4。
我們?cè)偌佣嘁粋€(gè)數(shù)組看看會(huì)怎樣:
$arr1 = array(1,9,5);
$arr2 = array(6,2,4);
$arr3 = array(3,7,8);
array_multisort($arr1,$arr2,$arr3);
查看結(jié)果,1自始至終都對(duì)應(yīng)6對(duì)應(yīng)3,其它項(xiàng)也是如此。這種對(duì)應(yīng)關(guān)系就是手冊(cè)中所謂的“排序時(shí)保留原有的鍵名關(guān)聯(lián)”。
另外也可以把每個(gè)數(shù)組想像成數(shù)據(jù)庫(kù)表的一列。而對(duì)應(yīng)著的1,6,3為一數(shù)據(jù)行,9,2,7為另一數(shù)據(jù)行。。。
array_multisort會(huì)先按第一個(gè)數(shù)組(想像成列)排序,如果第一個(gè)數(shù)組(列)的值相同,則按第二個(gè)數(shù)組(列)排序。
具體可以用下面的程式來(lái)測(cè)試:
$arr1 = array(1,9,5,9);
$arr2 = array(6,2,4,1);
$arr3 = array(3,7,8,0);
array_multisort($arr1,$arr2,$arr3);
可以想像這里$arr3的結(jié)果是(3,8,0,7)。
二、接下來(lái)講解array_multisort的參數(shù)。這個(gè)函數(shù)的參數(shù)很靈活。最簡(jiǎn)單的情況是如上面所示的以1個(gè)或n個(gè)數(shù)組作為參數(shù),需要注意的是每個(gè)數(shù)組的項(xiàng)數(shù)要一樣,否則會(huì)warning導(dǎo)致排序失效。
像這樣array_multisort($arr1,$arr2,$arr3); 默認(rèn)是所有數(shù)組都是升序排列,如果想對(duì)$arr2降序,并當(dāng)作字符串去比較,就要寫(xiě)成:
array_multisort($arr1, $arr2, SORT_DESC, SORT_STRING, $arr3);
每個(gè)array后面可以跟一個(gè)排序順序標(biāo)志或一個(gè)排序類(lèi)型標(biāo)志,或者兩種標(biāo)志同時(shí)出現(xiàn)。但是每種排序標(biāo)志在每個(gè)數(shù)組后面只能出現(xiàn)一個(gè)。
詳細(xì)如下:
排序順序標(biāo)志:
SORT_ASC - 按照上升順序排序(默認(rèn))
SORT_DESC - 按照下降順序排序
排序類(lèi)型標(biāo)志:
SORT_REGULAR - 將項(xiàng)目按照通常方法比較(默認(rèn))
SORT_NUMERIC - 將項(xiàng)目按照數(shù)值比較
SORT_STRING - 將項(xiàng)目按照字符串比較
三、最后是array_multisort有什么實(shí)際作用。
我們通常有一些多維數(shù)組需要排序:
$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
)
)
例如我們想按成績(jī)倒序排列,如果成績(jī)相同就按名字的升序排列。
這時(shí)我們就需要根據(jù)$guys的順序多弄兩個(gè)數(shù)組出來(lái):
$scores = array(80,70,80,20);
$names = array('jake','jin','john','ben');
然后
array_multisort($scores, SORT_DESC, $names, $guys);就行了
還能不能更靈活一點(diǎn)呢,每次想排序都要另外弄些數(shù)組出來(lái)嗎?
其實(shí)在qeephp的helper_array類(lèi)里面已經(jīng)封裝得很好,下面是它的兩個(gè)方法,需要的人自己修改一下就可以用了:
/**
* 根據(jù)指定的鍵對(duì)數(shù)組排序
*
* 用法:
* @code php
* $rows = array(
* array('id' = 1, '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);
* // 輸出結(jié)果為:
* // 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 要排序的數(shù)組
* @param string $keyname 排序的鍵
* @param int $dir 排序方向
*
* @return array 排序后的數(shù)組
*/
static function sortByCol($array, $keyname, $dir = SORT_ASC)
{
return self::sortByMultiCols($array, array($keyname = $dir));
}
/**
* 將一個(gè)二維數(shù)組按照多個(gè)列進(jìn)行排序,類(lèi)似 SQL 語(yǔ)句中的 ORDER BY
*
* 用法:
* @code php
* $rows = Helper_Array::sortByMultiCols($rows, array(
* 'parent' = SORT_ASC,
* 'name' = SORT_DESC,
* ));
* @endcode
*
* @param array $rowset 要排序的數(shù)組
* @param array $args 排序的鍵
*
* @return array 排序后的數(shù)組
*/
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;
}
網(wǎng)站題目:php查詢(xún)數(shù)據(jù)排序 php 排序函數(shù)
標(biāo)題來(lái)源:http://jinyejixie.com/article40/ddispho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、品牌網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站、用戶(hù)體驗(yàn)、定制開(kāi)發(fā)、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)