PHP实现二维数组按照指定的字段进行排序算法示例

 更新时间:2019年04月23日 14:24:42   作者:李维山   我要评论

这篇文章主要介绍了PHP实现二维数组按照指定的字段进行排序算法,涉及php针对数组的遍历、排序等相关操作技巧,需要的朋友可以参考下

本文实例讲述了PHP实现二维数组按照指定的字段进行排序算法。分享给大家供大家参考,具体如下:

遇到问题:把两个数组用php?#28304;?#30340;array_merge()函数合并之后,想按照两个数组中共有的'post_time'字段为新数组进行排序

解决办法:通过查阅官方手册,得知有array_multisort()这个函数,可以对多个数组或多维数组进行排序,返回排序之后的数组,其中字符串键名将被保留,但是数字键名将被重新索引,从 0 开始,并以 1 递增。

下面封装了这个函数,便于调用:

/**
 * 二维数组按照指定字段进行排序
 * @params array $array 需要排序的数组
 * @params string $field 排序的字段
 * @params string $sort 排序顺序标志 SORT_DESC 降序;SORT_ASC 升序
 */
function arraySequence($array, $field, $sort = 'SORT_DESC') {
 $arrSort = array();
 foreach ($array as $uniqid => $row) {
  foreach ($row as $key => $value) {
   $arrSort[$key][$uniqid] = $value;
  }
 }
 array_multisort($arrSort[$field], constant($sort), $array);
 return $array;
}
//测试:
$arrDemo = array(
array('name'=>'Jack','age'=>'22'),
array('name'=>'Tom','age'=>'24'),
array('name'=>'Green','age'=>'21'),
array('name'=>'Ben','age'=>'23'),);
$arrDemo = arraySequence($arrDemo,'age');
print_r($arrDemo);

运行结果:

Array
(
    [0] => Array
        (
            [name] => Tom
            [age] => 24
        )

    [1] => Array
        (
            [name] => Ben
            [age] => 23
        )

    [2] => Array
        (
            [name] => Jack
            [age] => 22
        )

    [3] => Array
        (
            [name] => Green
            [age] => 21
        )

)

新增:按照指定的多个字段排序

/**
 * 二维数组按照指定的多个字段进行排序
 *
 * 调用示例:sortArrByManyField($arr,'id',SORT_ASC,'age',SORT_DESC);
 */
function sortArrByManyField(){
 $args = func_get_args();
 if(empty($args)){
  return null;
 }
 $arr = array_shift($args);
 if(!is_array($arr)){
  throw new Exception("第一个参数应为数组");
 }
 foreach($args as $key => $field){
  if(is_string($field)){
   $temp = array();
   foreach($arr as $index=> $val){
    $temp[$index] = $val[$field];
   }
   $args[$key] = $temp;
  }
 }
 $args[] = &$arr;//引用值
 call_user_func_array('array_multisort',$args);
 return array_pop($args);
}
//测试:
$arrDemo = array(
array('name'=>'Jack','age'=>'22'),
array('name'=>'Tom','age'=>'24'),
array('name'=>'Green','age'=>'21'),
array('name'=>'Ben','age'=>'23'),);
$arrDemo = sortArrByManyField($arrDemo,'age');
print_r($arrDemo);

运行结果:

Array
(
    [0] => Array
        (
            [name] => Green
            [age] => 21
        )

    [1] => Array
        (
            [name] => Jack
            [age] => 22
        )

    [2] => Array
        (
            [name] => Ben
            [age] => 23
        )

    [3] => Array
        (
            [name] => Tom
            [age] => 24
        )

)

PS:这里再为大家推荐一款关于排序的演示工具供大家参考:

在线动画演示插入/选择/冒泡/归并/希尔/快速排序算法过程工具:
http://tools.jb51.net/aideddesign/paixu_ys

更多关于PHP相关内容?#34892;?#36259;的读者可查看本站专题:《PHP数组(Array)操作技巧大全》、《php排序算法总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《php字符串(string)用法总结》及《PHP常用遍历算法与技巧总结

希望本文所述对大家PHP程序设计有所帮助。

相关文章

  • php表单转换textarea换行符的方法

    php表单转换textarea换行符的方法

    今天在项目中遇到一个textarea换行的问题,调试了半天都没有解决。要将textarea里的回车换行转换成br存入数据库。
    2010-09-09
  • PHP转换文本框内容为HTML格式的方法

    PHP转换文本框内容为HTML格式的方法

    这篇文章主要介绍了PHP转换文本框内容为HTML格式的方法,通过自定义函数实现字符串转换为HTML格式的功能,涉及php针对HTML标签的替换技巧,需要的朋友可以参考下
    2016-07-07
  • php mysql_list_dbs()函数用法示例

    php mysql_list_dbs()函数用法示例

    这篇文章主要介绍了php mysql_list_dbs()函数用法,简单介绍了mysql_list_dbs()函数的功能及列出mysql所有数据库的实现技巧,需要的朋友可以参考下
    2017-03-03
  • 修改了一个很不错的php验证码(支持中文)

    修改了一个很不错的php验证码(支持中文)

    很早前在PHP喜悦国际村看到的一个验证码类,写的很强。但?#34892;?#36923;辑方面感觉处理的不好,然后我不?#19981;?#23436;全用session来处理验证码。这在大型系统中是很不好的
    2007-02-02
  • PHP无刷新上传文件实现代码

    PHP无刷新上传文件实现代码

    PHP无刷新上传文件实现代码,使用php的朋友可以参考下。
    2011-09-09
  • PHP结合Ueditor并修改?#35745;?#19978;传路径

    PHP结合Ueditor并修改?#35745;?#19978;传路径

    使用ueditor编辑器,附件默认在ueditor/php/upload/, 但是大家的附件地址的默?#19979;?#24452;可不是这个 ,需要修改ueditor,具体如何操作呢,下面我们就来详细讲解下
    2016-10-10
  • PHP通用检测函数集合

    PHP通用检测函数集合

    这些函数?#23478;?#27979;试才能使用,不保证个个都能使用,很多好的代码函数都可以在phpcms,dedecms,帝国cms中查找。
    2011-02-02
  • php的ZipArchive类用法实例

    php的ZipArchive类用法实例

    这篇文章主要介绍了php的ZipArchive类用法实例,较为详细的讲述了ZipArchive类操作zip文件的方法,需要的朋友可以参考下
    2014-10-10
  • php实现数字补零的方法总结

    php实现数字补零的方法总结

    这篇文章给大家总结了关于php实现数字补零的方法以及相关代码分享,?#34892;?#36259;的朋友们学习下。
    2018-09-09

最新评论

时时彩包赢公式0369
中福在线开乐彩是什么游戏 淘宝快3那里玩 bb电子游艺平台大全 新疆11选5选号 曾道人特码资料 七乐彩复式规则 新疆十一选五前三组技巧 大乐透走势图带连线图带 双色球派奖如何选号 重庆福彩欢乐生肖玩法 江苏十一选五的开奖 湖南快乐十分如何中奖 冰球比赛中国对韩国 幸运农场开奖走势图 32张牌九那些牌