特定字符上的PHP排序数组-->;排序($array[2])
我想在第二个字符[1](1到D)上对以下数组进行排序: 理想的输出如下:特定字符上的PHP排序数组-->;排序($array[2]),php,sorting,Php,Sorting,我想在第二个字符[1](1到D)上对以下数组进行排序: 理想的输出如下: $_SESSION['kartenstapel']=array( '11','21','31','41','51','W1','12','22','32','42','52','W2','13'... 您可以使用该函数传递自己的自定义比较函数 这里有几件事需要记住。首先需要比较的是[1]字符。但是,自然地,D不在1之后(例如),因此您需要进行一些操作。一个巧妙的技巧是将此字符视为十六进制数
$_SESSION['kartenstapel']=array(
'11','21','31','41','51','W1','12','22','32','42','52','W2','13'...
您可以使用该函数传递自己的自定义比较函数
这里有几件事需要记住。首先需要比较的是[1]
字符。但是,自然地,D
不在1
之后(例如),因此您需要进行一些操作。一个巧妙的技巧是将此字符视为十六进制数字(例如,通过使用并将其转换为整数)。其次,如果两个字符串的第二个字符相同,则需要按字典顺序排序,即仅从返回结果。当您将其全部放在一起时,您将得到如下结果:
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]”: 感谢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");
函数我的排序($a,$b){
如果($a[1]=$b[1])返回0;
return($a[1]因为它们都只有两个字符,所以看起来您可以通过比较每个字符串的倒数来排序
usort($_SESSION['kartenstapel'], function($a, $b) {
return strcmp(strrev($a), strrev($b));
});
使用usort()
并对其应用自定义排序函数。它很有效!感谢您指出这一点!非常感谢您的良好解释!我将使用您的函数。:)
usort($_SESSION['kartenstapel'], function($a, $b) {
return strcmp(strrev($a), strrev($b));
});