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中用文本文件做数据库的实现方法
Mar 27 PHP
php cookie 登录验证示例代码
Mar 16 PHP
基于php设计模式中单例模式的应用分析
May 15 PHP
php将session放入memcached的设置方法
Feb 14 PHP
php异常处理使用示例
Feb 25 PHP
百度地图API应用之获取用户的具体位置
Jun 10 PHP
weiphp微信公众平台授权设置
Jan 04 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
Feb 27 PHP
PHP Header失效的原因分析及解决方法
Nov 16 PHP
利用Laravel事件系统如何实现登录日志的记录详解
May 20 PHP
PHP APP微信提现接口代码
Sep 30 PHP
YII2框架中添加自定义模块的方法实例分析
Mar 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
PHP 加密解密内部算法
2010/04/22 PHP
PHP禁止个别IP访问网站
2013/10/30 PHP
phpMyAdmin自动登录和取消自动登录的配置方法
2014/05/12 PHP
PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)
2014/08/18 PHP
javascript下查找父节点的简单方法
2007/08/13 Javascript
javascript针对DOM的应用分析(二)
2012/04/15 Javascript
jQuery.lazyload+masonry改良图片瀑布流代码
2014/06/20 Javascript
js实现数字每三位加逗号的方法
2015/02/05 Javascript
nodejs URL模块操作URL相关方法介绍
2015/03/03 NodeJs
JS实现可点击展开与关闭的左侧广告代码
2015/09/02 Javascript
Seajs 简易文档 提供简单、极致的模块化开发体验
2016/04/13 Javascript
js html css实现复选框全选与反选
2016/10/09 Javascript
redux-saga 初识和使用
2018/03/10 Javascript
js+html5实现手机九宫格密码解锁功能
2018/07/30 Javascript
ES6 中可以提升幸福度的小功能
2018/08/06 Javascript
如何封装了一个vue移动端下拉加载下一页数据的组件
2019/01/06 Javascript
vue按需加载实例详解
2019/09/06 Javascript
通过javascript实现扫雷游戏代码实例
2020/02/09 Javascript
[03:01]DOTA2英雄基础教程 露娜
2014/01/07 DOTA
用Python进行行为驱动开发的入门教程
2015/04/23 Python
在Django框架中编写Context处理器的方法
2015/07/20 Python
python使用str &amp; repr转换字符串
2016/10/13 Python
python OpenCV学习笔记直方图反向投影的实现
2018/02/07 Python
Python中那些 Pythonic的写法详解
2019/07/02 Python
Python数据可视化:幂律分布实例详解
2019/12/07 Python
Python基础之高级变量类型实例详解
2020/01/03 Python
python 实现Harris角点检测算法
2020/12/11 Python
CSS3 calc()会计算属性详解
2018/02/27 HTML / CSS
css3 按钮样式简单可扩展创建
2013/03/18 HTML / CSS
运动服饰每月订阅盒:Ellie
2018/04/29 全球购物
数据管理员的自我评价分享
2013/11/15 职场文书
文明家庭先进事迹材料
2014/05/14 职场文书
大学应届毕业生求职信
2014/05/24 职场文书
汽车质检员岗位职责
2015/04/08 职场文书
企业党员岗位承诺书
2015/04/27 职场文书
工伤事故赔偿协议书
2015/08/06 职场文书