国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > PHP > 正文

PHP多維數(shù)組排序 保持索引對(duì)應(yīng)關(guān)系 巧用uasort

2020-03-22 18:27:59
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
  • 實(shí)際開(kāi)發(fā)中,多多少少都會(huì)遇到數(shù)組的排序問(wèn)題,除了常規(guī)的寫(xiě)簡(jiǎn)單的排序算法,PHP 還提供了內(nèi)置數(shù)組排序函數(shù),本次重點(diǎn)分享一下:uasort使用用戶自定義的比較函數(shù)對(duì)數(shù)組中的值進(jìn)行排序并保持索引關(guān)聯(lián),可排序多維數(shù)組,本文重點(diǎn)講解此函數(shù)。

    uasort 函數(shù)

    參數(shù)類型:booluasort(array &$array,callable $cmp_function)

    本函數(shù)對(duì)數(shù)組排序并保持索引和單元之間的關(guān)聯(lián)。

    主要用于對(duì)那些單元順序很重要的結(jié)合數(shù)組進(jìn)行排序。比較函數(shù)是用戶自定義的。

    成功時(shí)返回TRUE, 或者在失敗時(shí)返回FALSE。

    數(shù)組排序?qū)嵗ǚ?a href='http://www.survivalescaperooms.com/tag/class_1248_1.html' target='_blank'>class中):

     1 /** 2  * 自定義排序函數(shù) 3  * @param $param1 4  * @param $param2 5  * @return 0(不移動(dòng)) 1(正向調(diào)換順序) -1(逆向調(diào)換順序) 6  */ 7  8 function my_sort($param1, $param2){ 9     if($param1 == $param2) return 0;10     else return $param1 > $param2 ? 1 : -1;11 }12 13 $arr = array(14             'a'=>'20',15             'b'=>'1',16             'c'=>'10',17             'd'=>'5',18             'e'=>'21',19             'f'=>'4',20             'g'=>'3',21         );22 23 uasort($arr, 'my_sort');24 25 var_dump($arr);26 27 /*輸出值28 array (size=7)29   'b' => string '1' (length=1)30   'g' => string '3' (length=1)31   'f' => string '4' (length=1)32   'd' => string '5' (length=1)33   'c' => string '10' (length=2)34   'a' => string '20' (length=2)35   'e' => string '21' (length=2)36 */

    多維數(shù)組排序?qū)嵗ǚ莄lass中):

    /** * 自定義排序函數(shù) * @param $param1 * @param $param2 * @return 0(不移動(dòng)) 1(正向調(diào)換順序) -1(逆向調(diào)換順序) */function my_sort($param1, $param2){    if($param1['value'] == $param2['value']) return 0;    else return $param1['value'] > $param2['value'] ? 1 : -1;}$arr = array(            'a'=>array('key'=>'定義1', 'value'=>'20'),            'b'=>array('key'=>'定義2', 'value'=>'1'),            'c'=>array('key'=>'定義3', 'value'=>'10'),            'd'=>array('key'=>'定義4', 'value'=>'5'),            'e'=>array('key'=>'定義5', 'value'=>'21'),            'f'=>array('key'=>'定義6', 'value'=>'4'),            'g'=>array('key'=>'定義7', 'value'=>'3'),        );uasort($arr, 'my_sort');var_dump($arr);/*輸出值array (size=7)  'b' =>     array (size=2)      'key' => string '定義2' (length=7)      'value' => string '1' (length=1)  'g' =>     array (size=2)      'key' => string '定義7' (length=7)      'value' => string '3' (length=1)  'f' =>     array (size=2)      'key' => string '定義6' (length=7)      'value' => string '4' (length=1)  'd' =>     array (size=2)      'key' => string '定義4' (length=7)      'value' => string '5' (length=1)  'c' =>     array (size=2)      'key' => string '定義3' (length=7)      'value' => string '10' (length=2)  'a' =>     array (size=2)      'key' => string '定義1' (length=7)      'value' => string '20' (length=2)  'e' =>     array (size=2)      'key' => string '定義5' (length=7)      'value' => string '21' (length=2)*/

    class中排序,為了方便以二維數(shù)組為例:

    uasort($arr1, array($this, 'public_my_sort'));

    uasort($arr2, array('self', 'self_my_sort'));

    class myClassSort{        /**     * 排序主方法     * @param $arr1  self靜態(tài)排序     * @param $arr2  this排序     * @return 排序后的數(shù)組     */    public function main($arr1 = array(), $arr2 = array()){            uasort($arr1, array($this, 'public_my_sort'));                uasort($arr2, array('self', 'self_my_sort'));                return array('arr1'=>$arr1, 'arr2'=>$arr2);        }        /**     * 自定義排序函數(shù)     * @param $param1     * @param $param2     * @return 0(不移動(dòng)) 1(正向調(diào)換順序) -1(逆向調(diào)換順序)     */    private static function self_my_sort($param1, $param2){        if($param1['value'] == $param2['value']) return 0;        else return $param1['value'] > $param2['value'] ? 1 : -1;    }            //同上    public function public_my_sort($param1, $param2){        if($param1['value'] == $param2['value']) return 0;        else return $param1['value'] > $param2['value'] ? 1 : -1;    }    }$arr = array(            'a'=>array('key'=>'定義1', 'value'=>'20'),            'b'=>array('key'=>'定義2', 'value'=>'1'),            'c'=>array('key'=>'定義3', 'value'=>'10'),            'd'=>array('key'=>'定義4', 'value'=>'5'),            'e'=>array('key'=>'定義5', 'value'=>'21'),            'f'=>array('key'=>'定義6', 'value'=>'4'),            'g'=>array('key'=>'定義7', 'value'=>'3'),        );        $myClassSort = new myClassSort();var_dump($myClassSort->main($arr, $arr));/*輸出結(jié)果同以上實(shí)例*/

    類似函數(shù)擴(kuò)展

    array_multisort對(duì)多個(gè)數(shù)組或多維數(shù)組進(jìn)行排序,但是最終填入使用的還是具體一維數(shù)組

    arsort 對(duì)一維數(shù)組進(jìn)行逆向排序并保持索引關(guān)系,保持索引對(duì)應(yīng)關(guān)系

    asort對(duì)一維數(shù)組進(jìn)行正向排序并保持索引關(guān)系,保持索引對(duì)應(yīng)關(guān)系

    krsort對(duì)數(shù)組按照鍵名逆向排序,保持索引對(duì)應(yīng)關(guān)系

    ksort對(duì)數(shù)組按照鍵名正向排序,保持索引對(duì)應(yīng)關(guān)系

    natcasesort用“自然排序”算法對(duì)一維數(shù)組進(jìn)行不區(qū)分大小寫(xiě)字母的排序,可以用來(lái)排序數(shù)組內(nèi)容中字母數(shù)字混合的情況,保持索引對(duì)應(yīng)關(guān)系

    natsort用“自然排序”算法對(duì)一維數(shù)組排序,區(qū)分大小寫(xiě)字母,可以用來(lái)排序數(shù)組內(nèi)容中字母數(shù)字混合的情況,保持索引對(duì)應(yīng)關(guān)系

    rsort對(duì)一維數(shù)組逆向排序,不保持索引對(duì)應(yīng)關(guān)系

    sort對(duì)一維數(shù)組正向排序,不保持索引對(duì)應(yīng)關(guān)系

    uasort使用用戶自定義的比較函數(shù)對(duì)數(shù)組中的值進(jìn)行排序并保持索引關(guān)聯(lián),可排序多維數(shù)組,本文重點(diǎn)講解此函數(shù)

    uksort使用用戶自定義的比較函數(shù)對(duì)數(shù)組中的鍵名進(jìn)行排序

    usort使用用戶自定義的比較函數(shù)對(duì)數(shù)組中的值進(jìn)行排序,不保持索引關(guān)聯(lián)

    PHP編程

    鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

  • 發(fā)表評(píng)論 共有條評(píng)論
    用戶名: 密碼:
    驗(yàn)證碼: 匿名發(fā)表
    主站蜘蛛池模板: 哈尔滨市| 新干县| 瑞丽市| 萝北县| 夏河县| 壤塘县| 清河县| 高清| 湖州市| 青海省| 高雄市| 定边县| 南乐县| 库尔勒市| 兴海县| 盐津县| 庆城县| 南京市| 盐亭县| 祁连县| 当雄县| 湟源县| 河池市| 志丹县| 策勒县| 黄陵县| 湖北省| 广丰县| 卢龙县| 静安区| 西宁市| 南通市| 合阳县| 长子县| 南涧| 县级市| 竹北市| 阿克陶县| 丘北县| 泰安市| 高要市|