根据数组值的最后几个字符对数组进行排序


Sort an array by the last couple characters of its values?

在PHP中,如何根据数组值的最后几个字符对数组进行排序?以以下数组为例:

$donuts[0] = "Chocolate 02";
$donuts[1] = "Jelly 16";
$donuts[2] = "Glazed 01";
$donuts[3] = "Frosted 12";

排序后,数组将如下所示(注意基于每个值最后两个字符的顺序…还注意重写的索引):

$donuts[0] = "Glazed 01";
$donuts[1] = "Chocolate 02";
$donuts[2] = "Frosted 12";
$donuts[3] = "Jelly 16";

我似乎找不到一个内置的功能可以做到这一点,我一直在绞尽脑汁寻找最简单、最有效的方法来实现这一点。帮助谢谢!

这应该可以做到:

header('Content-Type: Text/Plain');
$donuts[0] = "Chocolate 02";
$donuts[1] = "Jelly 16";
$donuts[2] = "Glazed 01";
$donuts[3] = "Frosted 12";
print_r($donuts);
usort($donuts, function ($a, $b){
    return substr($b, -2) - substr($a, -2);
});
print_r($donuts);

注意

  1. 从最高值转换为最小值:

    return substr($b, -2) - substr($a, -2);
    
  2. 这个答案假设要使用最后两个字符。

更新

要使其在PHP 5.2版上运行,请将return部分更改为:

return substr($b, strlen($b) - 2) - substr($a, strlen($a) - 2);
usort($donuts, function ($a, $b) {
    preg_match('/'d+$/', $a, $matchA);
    preg_match('/'d+$/', $b, $matchB);
    return $matchA[0] - $matchB[0];
});

当然,这将从一些预处理中受益匪浅,因此您不需要一遍又一遍地preg_match相同的字符串。