我正在尝试使用学校班级名称对数组进行排序,但是当我使用字母排序功能时,他们不会按年级排序。
按字母顺序排序:
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中),然后是第四个字符,最后是第二个字符。
答案 0 :(得分: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
摆脱了关键。
答案 1 :(得分:2)
$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
)