PHP中有非常方便的對數組進行重新排序的方法——asort,關于asort的使用方法可以看 這里 。但是asort對含有中文key的數組進行排序時,有時候并不是按照字母順序。這主要是編碼問題,如果編碼為UTF-8,則不會按照字母順序來排,解決方法是先轉換成GBK編碼,排序完再轉回UTF-8.
示例:有一個數組$pass,結構類似為
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
|
Array ( [0] => stdClass Object ( [username] => 張三 [password] => DQ9uqQW2+UudOsZpQMnyvGG9L+RHZB6LRzBVDvAEL9uOBNf2zTWUnykhZFjhbzCH+LrSslRx9eSqU/n3gSLSUA== ) [1] => stdClass Object ( [username] => 李四 [password] => 2P/3j50ibk1BYmjHL+7/tt0d6LuOQMN9m8klXJCZbcajQtH5749jFTtH17WxiBZ9p425b4KIV/Xdv/7Bu4pJAQ== ) [2] => stdClass Object ( [username] => 王五 [password] => caq8lq0l6uxJPRx+sCBsBFUojSF+ox98gwO6c/AquXQ/y/aj/l/ziEGsXRSV+olcK7iKOJJ4IZZvX8DMPWZRRA== ) [3] => stdClass Object ( [username] => 趙六 [password] => taXp4jX0vO3VoFLyANfGrSjzy76WQQHMnzYAN9CyI20uKxLFMScXrFR3P525eImy0pG5zk8btBJoS/RyMxzJGQ== ) ) |
使用下面的代碼,將會把這個數組按照username的拼音排序。
1
2
3
4
5
6
7
|
foreach ( $pass as $key ) { $key ->username = iconv( 'UTF-8' , 'GBK' , $key ->username); } asort( $pass ); foreach ( $pass as $key ) { $key ->username = iconv( 'GBK' , 'UTF-8' , $key ->username); } |