php中陣列排序
阿新 • • 發佈:2018-12-02
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>';