当前位置:首页 >> PHP >> PHP基础

数组函数与排序(PHP数组7)

  • PHP基础
  • 2019-04-02 16:25:36
  • 人已阅读
简介数组元素由键名与值二部分组成,所以有二个排序依据一、根据值排序1 忽略键名:sort(),rsort(),usort()2 保留键名:asort(),arsort(),uasort()

数组元素由键名与值二部分组成,所以有二个排序依据

一、根据值排序

 1.忽略键名:sort(),rsort(),usort()

 2.保留键名:asort(),arsort(),uasort()

二、根据键名排序

 1. ksort()

 2. krsort()

 3. uksort()

记忆规律:

1.函数名有a: 保留键值关系,适合关联数组

2.函数名有r:逆序(降序),由大到小排列

3.函数名有u:自定义回调处理

一、根据数组的值进行排序

第一组: 忽略键名,主要针对索引数组

1.sort($arr) 升序

2.rsort($arr) 降序

3.usort($arr,$callback) 回调

案例:

//1.升序
$arr = [45,90,22,10,3,18,33];
sort($arr);
echo var_export($arr,true), '
'; //2.降序 $arr = [45,90,22,10,3,18,33]; rsort($arr); echo var_export($arr,true), '
'; //3.回调 $arr = [45,90,22,10,3,18,33]; usort($arr,function($var1, $var2){     $res = $var1 - $var2;     switch ($res) {         case ($res < 0):             return -1; //            return 1;     //降序             break;         case ($res > 0):             return 1; //            return -1;    //降序             break;         case ($res == 0):             return 0;             break;     } }); echo var_export($arr,true), '
'; //如果仅是简单的升降排序,显然sort(),rsort()更合适 //其实 usort()更多是与strcmp()配合实现多维数组的排序 $stu = [     ['name'=>'PHP', 'grade'=>98],     ['name'=>'JAVA', 'grade'=>55],     ['name'=>'C', 'grade'=>73], ]; //输出原始数组 echo '排序前:',var_export($stu,true), '
'; //用户自定义回调排序 usort($stu,function($m, $n){     return strcmp($m['grade'], $n['grade']); }); echo '排序后:',var_export($stu,true), '
';

结果:

array ( 0 => 3, 1 => 10, 2 => 18, 3 => 22, 4 => 33, 5 => 45, 6 => 90, )

array ( 0 => 90, 1 => 45, 2 => 33, 3 => 22, 4 => 18, 5 => 10, 6 => 3, )

array ( 0 => 3, 1 => 10, 2 => 18, 3 => 22, 4 => 33, 5 => 45, 6 => 90, )

排序前:array ( 0 => array ( 'name' => 'PHP', 'grade' => 98, ), 1 => array ( 'name' => 'JAVA', 'grade' => 55, ), 2 => array ( 'name' => 'C', 'grade' => 73, ), )

排序后:array ( 0 => array ( 'name' => 'JAVA', 'grade' => 55, ), 1 => array ( 'name' => 'C', 'grade' => 73, ), 2 => array ( 'name' => 'PHP', 'grade' => 98, ), )

一、根据数组的值进行排序 第二组: 保留键值关系,主要针对关联数组

1.asort($arr) 升序

2.arsort($arr) 降序

3.uasort($arr,$callback) 回调

案例:

//1.升序,键值保留
$price = ['合肥'=>18000, '上海'=>36000, '南京'=>25000,];  //房价排行榜
asort($price);
echo var_export($price,true), '
'; //2.降序,键值保留 $price = ['合肥'=>18000, '上海'=>36000, '南京'=>25000,];  //房价排行榜 arsort($price); echo var_export($price,true), '
'; //3.回调,案例请参考usort(),基本思路是一致的;

结果:

array ( '合肥' => 18000, '南京' => 25000, '上海' => 36000, )

array ( '上海' => 36000, '南京' => 25000, '合肥' => 18000, )

二、根据键名排序

1. ksort()

2. krsort()

3. uksort()

案例:

//1.按键名升序
$lang = ['html'=>'标记语言','css'=>'样式表','javascript'=>'前端脚本','php'=>'后端脚本'];
ksort($lang);
echo var_export($lang,true), '
'; //2.按键名降序 $lang = ['html'=>'标记语言','css'=>'样式表','javascript'=>'前端脚本','php'=>'后端脚本']; krsort($lang); echo var_export($lang,true), '
'; //3.自定义回调对键名排序 //根据键名的第二个字母进行排序 $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), '
';

结果:

array ( 'css' => '样式表', 'html' => '标记语言', 'javascript' => '前端脚本', 'php' => '后端脚本', )

array ( 'php' => '后端脚本', 'javascript' => '前端脚本', 'html' => '标记语言', 'css' => '样式表', )

array ( 'javascript' => '前端脚本', 'php' => '后端脚本', 'css' => '样式表', 'html' => '标记语言', )

Top