0

我正在尝试使用学校班级名称对数组进行排序,但是当我使用字母排序功能时,它们不会按年级排序。

按字母排序:

Array
(
   "LA2A",
   "LB1A",
   "LG2A",
   "LG3A",
   "LH2A",
   "LH3A",
   "LH4A",
   "LH5A",
   "LV4A",
   "LV5A",
   "LV6A"
)

这就是我想要实现的目标:

Array
( 
   "LB1A",
   "LA2A",
   "LG2A",
   "LH2A",
   "LG3A",
   "LH3A",
   "LH4A",
   "LV4A",
   "LH5A",
   "LV5A",
   "LV6A"
)

那么,如何按第一个第三个字符,然后是第四个,最后是第二个字符对数组(在 PHP 中)进行排序。

4

2 回答 2

2

使用usort演示

$test = array(
   "LA2A",
   "LB1A",
   "LG2A",
   "LG3A",
   "LH2A",
   "LH3A",
   "LH4A",
   "LH5A",
   "LV4A",
   "LV5A",
   "LV6A"
  );



//sort by first the third character, then the fourth and finally the second character.  
function mySort($left, $right) {

   $left = $left[2].$left[3].$left[1];
   $right = $right[2].$right[3].$right[1];

   return strcmp($left, $right);
}


usort($test, 'mySort');

$test 现在是:

Array (
   [0]  => LB1A
   [1]  => LA2A
   [2]  => LG2A
   [3]  => LH2A
   [4]  => LG3A
   [5]  => LH3A
   [6]  => LH4A
   [7]  => LV4A
   [8]  => LH5A
   [9]  => LV5A
   [10] => LV6A
)
于 2013-06-23T12:04:56.840 回答
2

最简单的方法是应用类似https://en.wikipedia.org/wiki/Schwartzian_transform

$arr = ...;
function add_key($x) { return $x[2] . $x[3] . $x[1] . $x; }
function rem_key($x) { return substr($x, 3); }
$tmp = array_map("add_key",$arr);
sort($tmp);
$res = array_map("rem_key",$tmp);

add_key通过将排序键复制到前面来调整每个字符串。然后我们对其进行排序。 rem_key摆脱钥匙。

于 2013-06-23T11:49:13.863 回答