fork download
  1. <?php
  2. $rd_list = array('中山北路一段','承德路九段','中山北路五段','承德路三段','中山北路六段','承德路二段','中山北路四段','中山北路七段');
  3.  
  4. echo 'Before sort:'.PHP_EOL;
  5. var_dump($rd_list);
  6.  
  7. usort($rd_list,function($a,$b){
  8. $pattern = '/(.*?)([一二三四五六七八九])段/u';
  9. $num = array('一','二','三','四','五','六','七','八','九');
  10. if (preg_match($pattern,$a,$matches_a) && preg_match($pattern,$b,$matches_b)){
  11. if ($matches_a[1] == $matches_b[1]){
  12. return array_search($matches_a[2],$num)-array_search($matches_b[2],$num);
  13. }
  14. }
  15. $a_big5 = iconv('UTF-8','big5',$a);
  16. $b_big5 = iconv('UTF-8','big5',$b);
  17. return strcmp($a_big5,$b_big5);
  18.  
  19. });
  20.  
  21. echo 'After sort:'.PHP_EOL;
  22. var_dump($rd_list);
  23.  
Success #stdin #stdout 0.01s 20640KB
stdin
Standard input is empty
stdout
Before sort:
array(8) {
  [0]=>
  string(18) "中山北路一段"
  [1]=>
  string(15) "承德路九段"
  [2]=>
  string(18) "中山北路五段"
  [3]=>
  string(15) "承德路三段"
  [4]=>
  string(18) "中山北路六段"
  [5]=>
  string(15) "承德路二段"
  [6]=>
  string(18) "中山北路四段"
  [7]=>
  string(18) "中山北路七段"
}
After sort:
array(8) {
  [0]=>
  string(18) "中山北路一段"
  [1]=>
  string(18) "中山北路四段"
  [2]=>
  string(18) "中山北路五段"
  [3]=>
  string(18) "中山北路六段"
  [4]=>
  string(18) "中山北路七段"
  [5]=>
  string(15) "承德路二段"
  [6]=>
  string(15) "承德路三段"
  [7]=>
  string(15) "承德路九段"
}