在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";
我似乎找不到可以做到这一点的内置函数,并且已经用最简单,最有效的方式来完成这项工作。救命!谢谢!
答案 0 :(得分:3)
这应该可以解决问题:
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);
注意强>
要从最高到最小转换:
return substr($b, -2) - substr($a, -2);
此答案假设使用最后2个字符。
<强>更新强>
要使其在PHP 5.2版上运行,请将return
部分更改为:
return substr($b, strlen($b) - 2) - substr($a, strlen($a) - 2);
答案 1 :(得分:1)
usort($donuts, function ($a, $b) {
preg_match('/\d+$/', $a, $matchA);
preg_match('/\d+$/', $b, $matchB);
return $matchA[0] - $matchB[0];
});
这当然会从一些预处理中受益匪浅,因此您不需要反复preg_match
个相同的字符串。