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 魔术函数使用说明
May 14 PHP
PHP常用的文件操作函数经典收藏
Apr 02 PHP
PHP stripos()函数及注意事项的分析
Jun 08 PHP
php中通过curl检测页面是否被百度收录
Sep 27 PHP
zf框架的session会话周期及次数限制使用示例
Mar 13 PHP
php通过ajax实现双击table修改内容
Apr 28 PHP
PHP常用编译参数中文说明
Sep 27 PHP
PHP实现的简单日历类
Nov 29 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
Aug 31 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
Dec 25 PHP
PHP连接MYSQL数据库实例代码
Jan 20 PHP
PHP使用PDO实现mysql防注入功能详解
Dec 20 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
关于BIG5-HKSCS的解决方法
2007/03/20 PHP
PHP实现搜索时记住状态的方法示例
2018/05/11 PHP
Yii框架学习笔记之应用组件操作示例
2019/11/13 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
2021/02/22 PHP
网页中实现浏览器的最大,最小化和关闭按钮
2007/03/12 Javascript
用javascript将数据库中的TEXT类型数据动态赋值到TEXTAREA中
2007/04/20 Javascript
HTA版JSMin(省略修饰语若干)基于javascript语言编写
2009/12/24 Javascript
jQuery学习笔记 获取jQuery对象
2012/09/19 Javascript
jQuery实现鼠标滚轮动态改变样式或效果
2015/01/05 Javascript
jQuery源码解读之hasClass()方法分析
2015/02/20 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
2015/07/13 Javascript
JavaScript性能优化之小知识总结
2015/11/20 Javascript
Javascript实现单例模式
2016/01/24 Javascript
JS+Canvas绘制时钟效果
2020/08/20 Javascript
jQuery+Ajax实现限制查询间隔的方法
2016/06/07 Javascript
D3.js实现柱状图的方法详解
2016/09/21 Javascript
js鼠标经过tab选项卡时实现切换延迟
2017/03/24 Javascript
JavaScript 巧学巧用
2017/05/23 Javascript
JS 60秒后重新发送验证码的实例讲解
2017/07/26 Javascript
超级简易的JS计算器实例讲解(实现加减乘除)
2017/08/08 Javascript
详解Angular系列之变化检测(Change Detection)
2018/02/26 Javascript
JS简单表单验证功能完整示例
2020/01/26 Javascript
Vue2.x和Vue3.x的双向绑定原理详解
2020/11/05 Javascript
[03:43]TI9战队采访——PSG.LGD
2019/08/22 DOTA
简单的连接MySQL与Python的Bottle框架的方法
2015/04/30 Python
Python使用修饰器进行异常日志记录操作示例
2019/03/19 Python
Python Tkinter模块 GUI 可视化实例
2019/11/20 Python
Django3.0 异步通信初体验(小结)
2019/12/04 Python
Python如何给你的程序做性能测试
2020/07/29 Python
世界上最好的儿童品牌:AlexandAlexa
2018/01/27 全球购物
Nike意大利官网:Nike.com IT
2020/01/19 全球购物
施工人员岗位职责
2013/12/12 职场文书
大学生职业生涯规划范文——找准自我,定位人生
2014/01/23 职场文书
文明家庭先进事迹材料
2014/05/14 职场文书
2015自愿离婚协议书范本
2015/01/28 职场文书
餐厅如何利用“营销策略”扭转亏本局面
2019/10/15 职场文书