官术网_书友最值得收藏!

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 />";
        }
主站蜘蛛池模板: 乌拉特中旗| 天峨县| 惠安县| 青田县| 定西市| 图片| 扶沟县| 炎陵县| 梁平县| 德令哈市| 林甸县| 驻马店市| 古浪县| 张家口市| 沁源县| 闸北区| 峡江县| 平舆县| 赣州市| 宜兴市| 海宁市| 开鲁县| 鄂尔多斯市| 平湖市| 策勒县| 镇远县| 新泰市| 新昌县| 航空| 汉寿县| 临武县| 北流市| 双城市| 桑日县| 宣恩县| 遵化市| 睢宁县| 安顺市| 太谷县| 嵊州市| 海安县|