复制代码 代码如下:
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() 就无法直接实现了:
1
2
3
4
5
6
7
8
9
10
11
12
|
$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 );
|
将输出:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
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,写了一个排序函数,仅支持二维数组。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
/**
* 根据数组中的某个键值大小进行排序,仅支持二维数组
*
* @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 ;
}
|