- PHP與MySQL高性能應(yīng)用開發(fā)
- 杜江
- 422字
- 2019-06-28 14:09:23
1.5 多維數(shù)組排序
使用PHP開發(fā)應(yīng)用,幾乎就是一直跟數(shù)組打交道。PHP數(shù)組的強(qiáng)大和靈活性能夠解決大部分應(yīng)用的問題。在數(shù)組編程中,常用的有sort()、ksort()等相關(guān)函數(shù),使用它們就可以很方便地處理一維數(shù)組,比如按鍵值降序和升序排列。
這些函數(shù)不能用于多維數(shù)組,但是在開發(fā)中常常是對多維數(shù)組排序處理。下面我們定義一個(gè)二維數(shù)組,如代碼清單1-3所示:
代碼清單1-3定義一個(gè)標(biāo)準(zhǔn)二維數(shù)組
<? php $a = array( array("sky", "blue"), array("apple", "red"), array("tree", "green") ); ?>
這是一個(gè)簡單的二維數(shù)組,數(shù)組的元素也是數(shù)組。我們可能需要對userid這個(gè)鍵排序,或者按漢字或英文字符排序。
為了給多維數(shù)組進(jìn)行排序,我們需要自定義排序函數(shù),然后再調(diào)用sort()、usort()、ksort()這些函數(shù),讓這些函數(shù)使用自定義函數(shù)。
uasort函數(shù)接受兩個(gè)參數(shù),并且返回一個(gè)值表示哪個(gè)參數(shù)應(yīng)該排在前面。負(fù)數(shù)或FALSE意味著第一個(gè)參數(shù)應(yīng)該排在第二個(gè)參數(shù)之前。正數(shù)或者TRUE表示第二個(gè)參數(shù)應(yīng)該排在前面,如果值為0,則表示兩個(gè)參數(shù)相等。
下面,我們對前面的數(shù)組第一個(gè)鍵進(jìn)行排序,代碼清單1-4是一個(gè)自定義函數(shù)。
代碼清單1-4將數(shù)組按鍵值排序的自定義函數(shù)
function my_compare($a, $b) { if ($a[1] < $b[1]) { return -1; }else if ($a[1] == $b[1]){ return 0; }else{ return 1; } }
這樣一來,我們可以后面使用uasort調(diào)用這個(gè)自定義函數(shù):
uasort($a, 'my_compare');
PHP會把內(nèi)層數(shù)組不斷地發(fā)送給此自定義函數(shù),從而將它排序完成。想要了解排序細(xì)節(jié),可以輸出函數(shù)里被比較的數(shù)值,由此我們可以看出自定義排序是如何被調(diào)用的。代碼清單1-5是腳本的完整代碼。
代碼清單1-5多維數(shù)組排序
<? php //定義多維數(shù)組 $a = array( array("sky", "blue"), array("apple", "red"), array("tree", "green") ); //自定義數(shù)組比較函數(shù),按數(shù)組的第二個(gè)元素進(jìn)行比較 function my_compare($a, $b) { if ($a[1] < $b[1]) { return -1; }else if ($a[1] == $b[1]){ return 0; }else{ return 1; } } //排序 usort($a, 'my_compare'); //輸出結(jié)果 foreach($a as $elem) { echo "$elem[0] : $elem[1]<br />"; }
- Android平板電腦開發(fā)實(shí)戰(zhàn)詳解和典型案例
- Revit 2020中文版從入門到精通
- 企業(yè)性能測試:體系構(gòu)建、落地指導(dǎo)與案例解讀
- 經(jīng)·理@互聯(lián)網(wǎng)產(chǎn)品經(jīng)理的進(jìn)階修煉
- Knative最佳實(shí)踐
- Android游戲開發(fā)大全
- Java高手真經(jīng)·編程基礎(chǔ)卷:Java核心編程技術(shù)
- 計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)集成技術(shù)基礎(chǔ)與解決方案
- 大話軟件工程:需求分析與軟件設(shè)計(jì)
- 軟件架構(gòu)指標(biāo):度量軟件系統(tǒng)的性能和架構(gòu)質(zhì)量
- 軟件開發(fā)的201個(gè)原則
- 深入淺出Spring Boot 3.x
- 劍指大前端全棧工程師(全2冊)
- MATLAB函數(shù)速查手冊(修訂版)
- MATLAB之幻方