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

yipeiwu_com5年前PHP代码库

复制代码 代码如下:

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文件是否有语法错误的方法

之前在当当的时候的一个项目中用到了一个简单的模板引擎,其实也是借鉴discuz来做的模板引擎,很简单,它所作的事情就是把一些自定义的标签编译成php代码。已经说了很简单了,所以编译的时候...

自动分页的不完整解决方案

测试代码 <form id="form1" name="form1" method="post" action="">  &...

PHP连接操作access数据库实例

因为之前做的PingSwitch要做一个WEB展示的前端,因为一开始用了Delphi和access的结构,而Delphi与MySQL的连接又相对麻烦,最后只能选择用PHP+Access的...

基于header的一些常用指令详解

header常用指令header分为三部分:第一部分为HTTP协议的版本(HTTP-Version);第二部分为状态代码(Status);第三部分为原因短语(Reason-Phrase)...

PHP和Shell实现检查SAMBA与NFS Server是否存在

通常会通过 /etc/fstab 来处理挂载的设置,然后再使用 mount -a 来重新确认挂载,最好在排程的程序用到挂载目录时也执行一次 mount -a,挂载目录在断线后是不会自动回...