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的session cookie错误
Aug 09 PHP
网站用php实现paypal整合方法
Nov 28 PHP
PHP测试程序运行时间的类
Feb 05 PHP
php 注册时输入信息验证器的实现详解
Jul 05 PHP
PHP jQuery表单,带验证具体实现方法
Feb 15 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
Jun 23 PHP
PHP 只允许指定IP访问(允许*号通配符过滤IP)
Jul 08 PHP
php格式化日期实例分析
Nov 12 PHP
yii,CI,yaf框架+smarty模板使用方法
Dec 29 PHP
微信开发之网页授权获取用户信息(二)
Jan 08 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
Jan 19 PHP
对laravel的csrf 防御机制详解,及form中csrf_token()的存在介绍
Oct 24 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 explode()函数用法、切分字符串
2012/10/03 PHP
PHP 实现判断用户是否手机访问
2015/01/21 PHP
javascript Xml增删改查(IE下)操作实现代码
2009/01/30 Javascript
javascript 操作文件 实现方法小结
2009/07/02 Javascript
js event事件的传递与冒泡处理
2009/12/06 Javascript
jQuery-ui中自动完成实现方法
2010/06/10 Javascript
基于jQuery的倒计时插件代码
2011/05/07 Javascript
js实现页面转发功能示例代码
2013/08/05 Javascript
jQuery-ui引入后Vs2008的无智能提示问题解决方法
2014/02/10 Javascript
详解JavaScript的策略模式编程
2015/06/24 Javascript
浅析jQuery Ajax请求参数和返回数据的处理
2016/02/24 Javascript
jQuery选择器实例应用
2017/01/05 Javascript
js实现5秒倒计时重新发送短信功能
2017/02/05 Javascript
深入解析js轮播插件核心代码的实现过程
2017/04/14 Javascript
angularJs中datatable实现代码
2017/06/03 Javascript
Javascript(es2016) import和require用法和区别详解
2017/08/11 Javascript
js截取字符串功能的实现方法
2017/09/27 Javascript
vue实现文件上传功能
2018/08/13 Javascript
使用apifm-wxapi模块中的问题及解决方法
2019/08/05 Javascript
VUE实现图片验证码功能
2020/11/18 Javascript
tracking.js实现前端人脸识别功能
2020/04/16 Javascript
JS eval代码快速解密实例解析
2020/04/23 Javascript
[02:51]2014DOTA2国际邀请赛 IG战队官方纪录片
2014/07/21 DOTA
Python MD5文件生成码
2009/01/12 Python
python抓取网页时字符集转换问题处理方案分享
2014/06/19 Python
Python实现将目录中TXT合并成一个大TXT文件的方法
2015/07/15 Python
基于wxPython的GUI实现输入对话框(1)
2019/02/27 Python
Python 的字典(Dict)是如何存储的
2019/07/05 Python
Django的Modelforms用法简介
2019/07/27 Python
如何完美的建立一个python项目
2020/10/09 Python
详解Python中的文件操作
2021/01/14 Python
大学生的四年学习自我评价
2013/12/13 职场文书
优秀党员获奖感言
2014/02/18 职场文书
北体毕业生求职信
2014/02/28 职场文书
工人先进事迹材料
2014/12/26 职场文书
个人房屋租赁合同(标准范本)
2019/09/16 职场文书