php对二维数组按指定键值key排序示例代码


Posted in PHP onNovember 26, 2013
function array_sort($array, $key){ 

if(is_array($array)){ 

$key_array = null; 

$new_array = null; 

for( $i = 0; $i < count( $array ); $i++ ){ 

$key_array[$array[$i][$key]] = $i; 

} 

ksort($key_array); 

$j = 0; 

foreach($key_array as $k => $v){ 

$new_array[$j] = $array[$v]; 

$j++; 

} 

unset($key_array); 

return $new_array; 

}else{ 

return $array; 

} 

}

PHP二维数组按键值排序

PHP 中 array_multisort() 可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。关联键名保持不变,但数字键名会被重新索引。输入数组被当成一个表的列并以行来排序,第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话就按照下一个输入数组中相应值的大小来排序,依此类推。

但是如果需要排序的数组是一个二维数组,需要按照数组的键值排序,如下面这个二维数组,需要按照sort键名来排序,那么array_multisort() 就无法直接实现了:

$data[5] = array('volume' => 67, 'edition' => 2);
$data[4] = array('volume' => 86, 'edition' => 1);
$data[2] = array('volume' => 85, 'edition' => 6);
$data[3] = array('volume' => 98, 'edition' => 2);
$data[1] = array('volume' => 86, 'edition' => 6);
$data[6] = array('volume' => 67, 'edition' => 7);
// 准备要排序的数组
foreach ($data as $k => $v) {
  $edition[] = $v['edition'];
}
array_multisort($edition, SORT_ASC, $data);
print_r($data);

将输出:

Array
(
  [0] => Array
    (
      [volume] => 86
      [edition] => 1
    )

  [1] => Array
    (
      [volume] => 67
      [edition] => 2
    )

  [2] => Array
    (
      [volume] => 98
      [edition] => 2
    )

  [3] => Array
    (
      [volume] => 85
      [edition] => 6
    )

  [4] => Array
    (
      [volume] => 86
      [edition] => 6
    )

  [5] => Array
    (
      [volume] => 67
      [edition] => 7
    )

)

为了不破坏原有的key,写了一个排序函数,仅支持二维数组。

/**
* 根据数组中的某个键值大小进行排序,仅支持二维数组
* 
* @param array $array 排序数组
* @param string $key 键值
* @param bool $asc 默认正序
* @return array 排序后数组
*/
function arraySortByKey(array $array, $key, $asc = true) 
{
  $result = array();
  // 整理出准备排序的数组
  foreach ( $array as $k => &$v ) {
    $values[$k] = isset($v[$key]) ? $v[$key] : '';
  }
  unset($v);
  // 对需要排序键值进行排序
  $asc ? asort($values) : arsort($values);
  // 重新排列原有数组
  foreach ( $values as $k => $v ) {
    $result[$k] = $array[$k];
  }
 
  return $result;
}
PHP 相关文章推荐
php 网页游戏开发入门教程一(webgame+design)
Oct 26 PHP
深入解析phpCB批量转换的代码示例
Jun 27 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
Jun 19 PHP
php简单实现MVC
Feb 05 PHP
PHP图像处理类库及演示分享
May 17 PHP
PHP下载文件的函数实例代码
May 18 PHP
Zend Framework分发器用法示例
Dec 11 PHP
PHP验证码类ValidateCode解析
Jan 07 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
Feb 15 PHP
PHP实现八皇后算法
May 06 PHP
thinkphp框架使用JWTtoken的方法详解
Oct 10 PHP
Laravel 实现Controller向blade前台模板赋值的四种方式小结
Oct 22 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
Nov 26 #PHP
PHP获取当前url的具体方法全面解析
Nov 26 #PHP
php 批量替换html标签的实例代码
Nov 26 #PHP
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
Nov 26 #PHP
php数组去重实例及分析
Nov 26 #PHP
php三维数组去重(示例代码)
Nov 26 #PHP
php导出word格式数据的代码实例
Nov 25 #PHP
You might like
PHP新手用的Insert和Update语句构造类
2012/03/31 PHP
php时间函数用法分析
2016/05/28 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
2016/07/20 PHP
如果文字过长,则将过长的部分变成省略号显示
2006/06/26 Javascript
javascript编程起步(第七课)
2007/02/27 Javascript
不能再简单的无闪刷新验证码原理很简单
2007/11/05 Javascript
javascript让setInteval里的函数参数中的this指向特定的对象
2010/01/31 Javascript
jQuery学习笔记之 Ajax操作篇(三) - 过程处理
2014/06/23 Javascript
使用BootStrap和Metroui设计的metro风格微网站或手机app界面
2016/10/21 Javascript
jQuery插件HighCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/15 Javascript
JavaScript之DOM插入更新删除_动力节点Java学院整理
2017/07/03 Javascript
jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能示例
2017/10/19 jQuery
利用ES6实现单例模式及其应用详解
2017/12/09 Javascript
Angular2进阶之如何避免Dom误区
2018/04/02 Javascript
vue递归组件实战之简单树形控件实例代码
2019/08/27 Javascript
零基础学Python(一)Python环境安装
2014/08/20 Python
用Python生成器实现微线程编程的教程
2015/04/13 Python
举例讲解Python面相对象编程中对象的属性与类的方法
2016/01/19 Python
python自动裁剪图像代码分享
2017/11/25 Python
Python中的字符串切片(截取字符串)的详解
2019/05/15 Python
Python基于requests库爬取网站信息
2020/03/02 Python
如何卸载python插件
2020/07/08 Python
python简单实现9宫格图片实例
2020/09/03 Python
HTML5 UTF-8 中文乱码的解决方法
2013/11/18 HTML / CSS
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
AVIS安飞士奥地利租车官网:提供奥地利、欧洲和全世界汽车租赁
2016/11/29 全球购物
2014年应届大学生自我评价
2014/01/09 职场文书
30年同学聚会邀请函
2014/01/25 职场文书
关于读书的演讲稿300字
2014/08/27 职场文书
会议通知范文
2015/04/15 职场文书
村官2015年度工作总结
2015/10/14 职场文书
受欢迎的自荐信,就这么写!
2019/04/19 职场文书
会计专业自荐信范文
2019/05/22 职场文书
OpenCV-Python实现油画效果的实例
2021/06/08 Python
Python中npy和mat文件的保存与读取
2022/04/24 Python
纯CSS打字动画的实现示例
2022/08/05 HTML / CSS