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>';

猜你喜欢

转载自blog.csdn.net/qq_36672905/article/details/83960318
今日推荐