1. 程式人生 > >php中陣列排序

php中陣列排序

  1.根據值排序
   忽略鍵名:升序sort()  降序rsort()  使用者自定義usort($arr,$callback)回撥
   保留鍵名: 升序asort()  降序arsort()  使用者自定義uasort($arr,$callback)

 2.根據鍵名排序  多用於關聯陣列
   升序ksort()  降序krsort()  使用者自定義uksort()

 

/**
* 一、根據陣列的值進行排序
* 第一組: 忽略鍵名,主要針對索引陣列
* 1.sort($arr) 升序
* 2.rsort($arr) 降序
* 3.usort($arr,$callback) 回撥
*/

/**
 * 一、根據陣列的值進行排序
 * 第一組: 忽略鍵名,主要針對索引陣列
 * 1.sort($arr) 升序
 * 2.rsort($arr) 降序
 * 3.usort($arr,$callback) 回撥
 */

//1.升序
$arr = [45,90,22,10,3,18,33];
sort($arr);    //引用傳遞,原陣列發生變化
echo '<pre>'.var_export($arr,true).'<br>';

//2.降序
rsort($arr);
echo '<pre>'.var_export($arr,true).'<br>';

//回撥
$arr = [45,90,22,10,3,18,33];
usort($arr,function($m,$n){
    $k = $m -$n;
    switch ($k)
    {
        case ($k<0):
          //  return -1; //升序
            return 1;     //降序
            break;
        case ($k>0):
           // return 1;  //升序
            return -1;    //降序
            break;
        case ($k=0):
            return 0;
            break;
    }
});
echo '<pre>'.var_export($arr,true).'<hr>';

//其實 usort()更多是與strcmp()配合實現多維陣列的排序
//strcmp()函式比較兩個字串
//本函式返回:
//0 - 如果兩個字串相等
//<0 - 如果 string1 小於 string2
//>0 - 如果 string1 大於 string2
// 注意:::strcmp()比較按ASCII來比較,如果比較數字長度必須相同,有可能出現意想不到的結果  ‘20’ > '108'
$stu = [
    ['name'=>'楊冪', 'grade'=>435],
    ['name'=>'范冰冰', 'grade'=>355],
    ['name'=>'左小青', 'grade'=>732],
];

echo '<pre>'.var_export($stu,true).'<hr>';
//根據使用者自定義回撥來進行排序
usort($stu,function($m, $n){
    return strcmp($m['grade'], $n['grade']);
});
echo '<pre>'.var_export($stu,true).'<hr>';

/**
* 一、根據陣列的值進行排序
* 第二組: 保留鍵值關係,主要針對關聯陣列
* 1.asort($arr) 升序
* 2.arsort($arr) 降序
* 3.uasort($arr,$callback) 回撥
*/

 

//1.升序,鍵值保留
$price = ['合肥'=>18000, '上海'=>36000, '南京'=>25000,];  //房價排行榜
asort($price);
echo '<pre>'.var_export($price,true).'<br>';

//2.降序,鍵值保留
$price = ['合肥'=>18000, '上海'=>36000, '南京'=>25000,];  //房價排行榜
arsort($price);
echo var_export($price,true), '<hr>';

//3.回撥,案例請參考usort(),基本思路是一致的;
$stud = [
    ['name'=>'王楚', 'grade'=>435],
    ['name'=>'范冰冰', 'grade'=>355],
    ['name'=>'左小青', 'grade'=>732],
];
//根據使用者自定義回撥來進行排序
uasort($stud,function($m, $n){
    return strcmp($m['grade'], $n['grade']);
});
echo '<pre>'.var_export($stud,true).'<hr>';

 

/**
* 二、根據鍵名排序
* 1. ksort()
* 2. krsort()
* 3. uksort()
*/

//1.按鍵名升序
$lang = ['html'=>'標記語言','css'=>'樣式表','javascript'=>'前端指令碼','php'=>'後端指令碼'];
ksort($lang);
echo '<pre>'.var_export($lang,true).'<br>';

//2.按鍵名降序
$lang = ['html'=>'標記語言','css'=>'樣式表','javascript'=>'前端指令碼','php'=>'後端指令碼'];
krsort($lang);
echo var_export($lang,true), '<hr>';

//3.自定義回撥對鍵名排序
//根據鍵名的第二個字母進行排序
//substr(string,start,length)           substr() 函式返回字串的一部分。
$lang = ['html'=>'標記語言','css'=>'樣式表','javascript'=>'前端指令碼','php'=>'後端指令碼'];
uksort($lang,function($m,$n){
    $a = substr($m,1,1);
    $b = substr($n,1,1);
    return strcmp($a,$b);
});
echo var_export($lang,true), '<hr>';