我想在第二个字符[1](1到D)上对以下数组进行排序:
$_SESSION['kartenstapel']=array(
'11','12','13','14','15','16','17','18','19','1A','1B','1C','1D',
'21','22','23','24','25','26','27','28','29','2A','2B','2C','2D',
'31','32','33','34','35','36','37','38','39','3A','3B','3C','3D',
'41','42','43','44','45','46','47','48','49','4A','4B','4C','4D',
'51','52','53','54','55','56','57','58','59','5A','5B','5C','5D',
'W1','W2','W3','W4','W5','W6','W7','W8','W9','WA','WB','WC','WD'
);
理想输出如下:
$_SESSION['kartenstapel']=array(
'11','21','31','41','51','W1','12','22','32','42','52','W2','13'...
答案 0 :(得分:1)
您可以使用usort
功能传递自己的自定义比较功能。
这里有几点要记住。您需要比较的第一件事是[1]
字符。但是,D
自然不会1
之后(例如),因此您需要进行一些操作。一个巧妙的技巧是将此字符视为十六进制数字(例如,使用base_convert
并将其转换为整数。其次,如果两个字符串的第二个字符相同,则您需要按字典顺序排序,即只返回strcmp
的结果。当你把它们放在一起时,你会得到这样的结果:
usort($_SESSION['kartenstapel'], function ($a, $b) {
$cmp = base_convert($a[1], 16, 10) - base_convert($b[1], 16, 10);
if ($cmp != 0) {
return $cmp;
}
return strcmp($a, $b);
});
答案 1 :(得分:1)
以下功能对我有用。它取自我,我只需要添加“[1]”:http://www.w3schools.com/php/showphp.asp?filename=demo_func_usort
感谢Rizier123。
function my_sort($a,$b){
if ($a[1]==$b[1]) return 0;
return ($a[1]<$b[1])?-1:1;
}
usort($_SESSION['kartenstapel'],"my_sort");
答案 2 :(得分:1)
由于他们只有两个字符,看起来你可以通过比较每个字符串的反向来排序。
usort($_SESSION['kartenstapel'], function($a, $b) {
return strcmp(strrev($a), strrev($b));
});