加入收藏 | 设为首页 | 会员中心 | 我要投稿 惠州站长网 (https://www.0752zz.com.cn/)- 办公协同、云通信、物联设备、操作系统、高性能计算!
当前位置: 首页 > 教程 > 正文

一些php数组排序函数示例总结

发布时间:2022-07-24 10:20:52 所属栏目:教程 来源:互联网
导读:在php中数组排序有很多函数可以实现的,如果是简单的一维数组排序我们可以使用php 自带的排序函数了,但多维数组时我们需要自己写了。 回来后一直在揪心啊,于是翻了一下书本查阅,给我知道了答案,为了记住它们,我决定来一个数组排序函数大总结。 首先接触的就是
  在php中数组排序有很多函数可以实现的,如果是简单的一维数组排序我们可以使用php 自带的排序函数了,但多维数组时我们需要自己写了。
 
  回来后一直在揪心啊,于是翻了一下书本查阅,给我知道了答案,为了记住它们,我决定来一个数组排序函数大总结。
 
  首先接触的就是PHP数组排序、降序的排序问题。
 
  sort:本函数为 array 中的单元赋予新的键名。这将删除原有的键名而不仅是重新排序。
 
  rsort:本函数对数组进行逆向排序(最高到最低)。 删除原有的键名而不仅是重新排序。
 
  asort:对数组进行排序并保持索引关系
 
  arsort:对数组进行逆向排序并保持索引关系
 
  ksort:对数组按照键名排序,保留键名到数据的关联
 
  krsort:对数组按照键名逆向排序,保留键名到数据的关联
 
  natsort:对字母数字字符串进行排序并保持原有键/值的关联
 
  natcasesort:同natsort排序算法,但不区分大小写字母排序
 
  PHP 数组排序(sort)
 
  数字索引数组排序:
 
  函数:sort(array, [sort type])
 
  说明:sort()函数按升序对指定数组(第一个参数)进行排序。
 
  sort函数第二参数作用为指定排序类型,是可选参数.
 
  SORT_REGULAR: 默认值,不改变类型进行排序;
 
  SORT_NUMERIC: 把值作为数字进行排序;
 
  SORT_STRING: 把值作为字符串进行排序;
 
  如数组中有4和”37″,按数字排序,4小于”37″;按字符串排序,4大于”37″;
  一、一维数组
 
  假设有一个一维数组,如下:
 
  $sortArr = array("name"=>"hiro", "age"=>"23", "city"=>"Shanghai", "code"=>"200051");
 
  print_r()输出的原始数组结果为:
 
  Array ( [name] => hiro [age] => 23 [city] => Shanghai [code] => 200051 )
 
  1.sort()函数:根据数组下标进行升序排列;
 
  print_r()输出的数组结果为(输出时只有数组下标,而不是键名):
 
  Array ( [0] => 23 [1] => 200051 [2] => Shanghai [3] => hiro )
 
  2.rsort()函数:与sort()函数相反,根据数组下标进行降序排列;
 
  print_r()输出的数组结果为(输出时只有数组下标,而不是键名):
 
  Array ( [0] => hiro [1] => Shanghai [2] => 200051 [3] => 23 )
 
  3.asort()函数:根据数组的键名进行升序排列;
 
  print_r()输出的数组结果为:
 
  Array ( [age] => 23 [code] => 200051 [city] => Shanghai [name] => hiro )
 
  4.arsort()函数:与asort()函数相反,根据数组的键名进行降序排列;
 
  print_r()输出的数组结果为:
 
  Array ( [name] => hiro [city] => Shanghai [code] => 200051 [age] => 23 )
 
  5.ksort()函数:根据数组的键值进行升序排列;
 
  print_r()输出的数组结果为:
 
  Array ( [age] => 23 [city] => Shanghai [code] => 200051 [name] => hiro )
 
  6.krsort()函数:与ksort()函数相反,根据数组的键值进行降序排列;
 
  print_r()输出的数组结果为:
 
  Array ( [name] => hiro [city] => Shanghai [code] => 200051 [age] => 23 )
 
  7.reverse_array()函数:反向当前的数组排列顺序;
 
  print_r()输出的数组结果为:
 
  Array ( [name] => hiro [age] => 23 [city] => Shanghai [code] => 200051 )
 
  8.shuffle()函数:随机地排列数组顺序(每次刷新后排列的顺序都不相同);
 
  print_r()输出的数组结果为(只是其中一种随机排列):
 
  Array ( [0] => 23 [1] => 200051 [2] => Shanghai [3] => hiro )
 
  二、二维数组
 
  假设有一个二维数组,代码如下:
 
  $person = array(
   array("hiro", "23", "suzhou"),
   array("yoyo", "25", "shanghai"),
   array("janstar", "28", "xinjiang")
  );  
  //print_r()输出的原始数组结果为:
  1
   Array ( [0] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [1] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) [2] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) )
  二维数组的排序是根据每维的键名排序的,所以需要额外地编写比较函数。先举三个例子:
 
  1.按每维的第一个元素升序排列,代码如下:
 
  function compare0($x, $y) {
   if($x[0] == $t[0]) {
    return 0;
   } elseif ($x[0] < $y[0]) {
    return -1;
   } else {
    return 1;
   }
  }
   
  usort($person, compare0);
  echo "按第一个元素正向排序:";
  print_r($person);  
  //输出的结果如下:
  1
   按第一个元素正向排序:Array ( [0] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [1] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) [2] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) )
  2.按每维的第三个元素升序排列,代码如下:
 
  function compare2($x, $y) {
   if($x[2] == $t[2]) {
    return 0;
   } elseif ($x[2] < $y[2]) {
    return -1;
   } else {
    return 1;
   }
  }
   
  usort($person, compare2);
  echo "按第三个元素正向排序:";
  print_r($person);  
  输出的结果如下:
   
   按第三个元素正向排序:Array ( [0] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) [1] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [2] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) ) 

(编辑:惠州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读