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二維數(shù)組按鍵值排序
PHP 中 array_multisort() 可以用來(lái)一次對(duì)多個(gè)數(shù)組進(jìn)行排序,或者根據(jù)某一維或多維對(duì)多維數(shù)組進(jìn)行排序。關(guān)聯(lián)鍵名保持不變,但數(shù)字鍵名會(huì)被重新索引。輸入數(shù)組被當(dāng)成一個(gè)表的列并以行來(lái)排序,第一個(gè)數(shù)組是要排序的主要數(shù)組。數(shù)組中的行(值)比較為相同的話就按照下一個(gè)輸入數(shù)組中相應(yīng)值的大小來(lái)排序,依此類推。
但是如果需要排序的數(shù)組是一個(gè)二維數(shù)組,需要按照數(shù)組的鍵值排序,如下面這個(gè)二維數(shù)組,需要按照sort鍵名來(lái)排序,那么array_multisort() 就無(wú)法直接實(shí)現(xiàn)了:
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); // 準(zhǔn)備要排序的數(shù)組 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,寫了一個(gè)排序函數(shù),僅支持二維數(shù)組。
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
|
/** * 根據(jù)數(shù)組中的某個(gè)鍵值大小進(jìn)行排序,僅支持二維數(shù)組 * * @param array $array 排序數(shù)組 * @param string $key 鍵值 * @param bool $asc 默認(rèn)正序 * @return array 排序后數(shù)組 */ function arraySortByKey( array $array , $key , $asc = true) { $result = array (); // 整理出準(zhǔn)備排序的數(shù)組 foreach ( $array as $k => & $v ) { $values [ $k ] = isset( $v [ $key ]) ? $v [ $key ] : '' ; } unset( $v ); // 對(duì)需要排序鍵值進(jìn)行排序 $asc ? asort( $values ) : arsort( $values ); // 重新排列原有數(shù)組 foreach ( $values as $k => $v ) { $result [ $k ] = $array [ $k ]; } return $result ; } |