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安装全攻略:APACHE
Oct 09 PHP
PHP 函数语法介绍一
Jun 14 PHP
PHP 远程关机实现代码
Nov 10 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
Aug 09 PHP
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
Jul 04 PHP
php跨服务器访问方法小结
May 12 PHP
摘自织梦CMS中的图片处理类
Aug 08 PHP
thinkPHP基于ajax实现的菜单与分页示例
Jul 12 PHP
PHP依赖注入原理与用法分析
Aug 21 PHP
浅谈Laravel中的三种中间件的作用
Oct 13 PHP
tp5.1 实现setInc字段自动加1
Oct 18 PHP
PHP接口类(interface)的定义、特点和应用示例
May 18 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
15种PHP Encoder的比较
2007/03/06 PHP
推荐几个开源的微信开发项目
2014/12/28 PHP
php格式化电话号码的方法
2015/04/24 PHP
WIN8.1下搭建PHP5.6环境
2015/04/29 PHP
PHP实现抓取迅雷VIP账号的方法
2015/07/30 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
Jquery判断IE6等浏览器的代码
2011/04/05 Javascript
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
获取元素距离浏览器周边的位置的方法getBoundingClientRect
2013/04/17 Javascript
js 针对html DOM元素操作等经验累积
2014/03/11 Javascript
html5+javascript实现简单上传的注意细节
2016/04/18 Javascript
js实现点击图片自动提交action的简单方法
2016/10/16 Javascript
vue加载自定义的js文件方法
2018/03/13 Javascript
Vue三种常用传值示例(父传子、子传父、非父子)
2018/07/24 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
2018/09/03 Javascript
在Vue中获取组件声明时的name属性方法
2018/09/12 Javascript
Vue formData实现图片上传
2019/08/20 Javascript
vue仿淘宝滑动验证码功能(样式模仿)
2019/12/10 Javascript
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
2020/01/08 Javascript
vue项目中监听手机物理返回键的实现
2020/01/18 Javascript
JavaScript实现网页计算器功能
2020/10/29 Javascript
跟老齐学Python之做一个小游戏
2014/09/28 Python
django mysql数据库及图片上传接口详解
2019/07/18 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
2019/08/29 Python
python在linux环境下安装skimage的示例代码
2020/10/14 Python
python boto和boto3操作bucket的示例
2020/10/30 Python
python爬虫用request库处理cookie的实例讲解
2021/02/20 Python
香港时尚女装购物网站:ZAFUL
2017/07/19 全球购物
巴西最大的巴士票务门户:Quero Passagem
2020/11/21 全球购物
车辆工程专业求职信
2014/06/14 职场文书
设计专业自荐信
2014/06/19 职场文书
献爱心大型公益活动策划方案
2014/09/15 职场文书
工作业绩不及格检讨书
2014/10/28 职场文书
民间借贷借条范本
2015/05/25 职场文书
建筑工程挂靠协议书
2016/03/23 职场文书
详解Vue的options
2021/05/15 Vue.js