最新公告
  • 欢迎您光临波比源码,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 一些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 )

    二、二维数组

    假设有一个二维数组,代码如下:

    1. $person = array
    2.  array("hiro""23""suzhou"), 
    3.  array("yoyo""25""shanghai"), 
    4.  array("janstar""28""xinjiang"
    5. );  
    6. //print_r()输出的原始数组结果为: 
    7.  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.按每维的第一个元素升序排列,代码如下:

    1. function compare0($x$y) { 
    2.  if($x[0] == $t[0]) { 
    3.   return 0; 
    4.  } elseif ($x[0] < $y[0]) { 
    5.   return -1; 
    6.  } else { 
    7.   return 1; 
    8.  } 
    9.  
    10. usort($person, compare0); 
    11. echo "按第一个元素正向排序:"
    12. print_r($person);  
    13. //输出的结果如下: 
    14.  按第一个元素正向排序: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.按每维的第三个元素升序排列,代码如下:

    1. function compare2($x$y) { 
    2.  if($x[2] == $t[2]) { 
    3.   return 0; 
    4.  } elseif ($x[2] < $y[2]) { 
    5.   return -1; 
    6.  } else { 
    7.   return 1; 
    8.  } 
    9.  
    10. usort($person, compare2); 
    11. echo "按第三个元素正向排序:"
    12. print_r($person);  
    13. 输出的结果如下: 
    14.  
    15.  按第三个元素正向排序: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 ) ) 

    3.按每维的第三个元素升序排列,代码如下:

    1. function reverse_compare2($x$y) { 
    2.  if($x[2] == $t[2]) { 
    3.   return 0; 
    4.  } elseif ($x[2] < $y[2]) { 
    5.   return 1; //改变后即可反向 
    6.  } else { 
    7.   return -1; //改变后即可反向 
    8.  } 
    9.  
    10. usort($person, reverse_compare2); 
    11. echo "按第三个元素反向排序:"
    12. print_r($person);  
    13. //输出的结果如下:1 
    14. //按第三个元素反向排序: 
    15. Array ( [0] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) [1] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [2] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) ) 

    呵呵,是不是代码多了点,记下了以后方便查阅啊!

    例代码如下:

    1. <?php 
    2. error_reporting(0); 
    3. /** 
    4. * @数字数组排序 可按从大到小或从小到大排序   
    5. */ 
    6. function sortArray($array$choice) { 
    7.     $values = array_values($array); // 建立一个数字索引的数组 
    8.     $ch = $choice==0 ? min:max; // 参数$choice为0按从小到大排列,否则其他都默认为按从大到小 
    9.     do { 
    10.         $val = $ch($values); // 找出最大或最小值 
    11.         $key = array_search($val,$values); // 取得最大值的键名 
    12.         $result[$key] = $val// 将最大值存入新数组 
    13.         unset($values[$key]); 
    14.     } while (count($values) > 0); 
    15.     return $result
    16. $array = array(100, 1000, 1, 10000); 
    17. //$array = sortArray($array, 0); 
    18. $array = sortArray($array, 1); 
    19. foreach($array as $a) { 
    20.     echo "$a "
    21. ?> 
    波比源码 – 精品源码模版分享 | www.bobi11.com
    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

    波比源码 » 一些php数组排序函数示例总结

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    波比源码
    一个高级程序员模板开发平台
    升级波友尊享更多特权立即升级