Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
特定字符上的PHP排序数组-->;排序($array[2])_Php_Sorting - Fatal编程技术网

特定字符上的PHP排序数组-->;排序($array[2])

特定字符上的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之后(例如),因此您需要进行一些操作。一个巧妙的技巧是将此字符视为十六进制数

我想在第二个字符[1](1到D)上对以下数组进行排序:

理想的输出如下:

$_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));
});