在php中按数组的最后一个字符对数组列表进行排序
在PHP中,如何根据数组值的最后一个字符对数组进行排序?以以下数组为例:在php中按数组的最后一个字符对数组列表进行排序,php,Php,在PHP中,如何根据数组值的最后一个字符对数组进行排序?以以下数组为例: $string[0] = "They"; $string[1] = "started"; $string[2] = "plotting"; $string[3] = "against"; $string[4] = "him"; 排序后,数组将如以下注释所示:基于每个值的最后一个字符的顺序。。。还要注意重写的索引: $str
$string[0] = "They";
$string[1] = "started";
$string[2] = "plotting";
$string[3] = "against";
$string[4] = "him";
排序后,数组将如以下注释所示:基于每个值的最后一个字符的顺序。。。还要注意重写的索引:
$string[0] = "started";
$string[1] = "plotting";
$string[2] = "him";
$string[3] = "against";
$string[4] = "they";
允许传递自定义排序函数,因此您可以执行以下操作:
usort($string , function($a, $b) {
$aLastChar = substr($a, -1);
$bLastChar = substr($b, -1);
return ($aLastChar < $bLastChar) ? -1 : 1;
});
可以反转数组值文本并像往常一样使用排序,然后再次反转输出 因为你在考虑单词的最后一个字母
$strings = [
"They",
"started",
"plotting",
"against",
"him",
];
foreach ($strings as $key => $value) {
$strings[$key] = strrev($value);
}
sort($strings);
foreach ($strings as $key => $value) {
$strings[$key] = strrev($value);
}
print_r($strings);
结果:
Array
(
[0] => started
[1] => plotting
[2] => him
[3] => against
[4] => They
)
我很久没有接触过php了,这不是最干净的解决方案。但一个快速的解决方案是使用array_map反转所有字符串,然后调用sort对数组进行排序,然后再次反转数组。一个更有效的解决方案是编写一个自定义比较器,这样您只需在数组中迭代一次;而不是三次
$string[0] = "They";
$string[1] = "started";
$string[2] = "plotting";
$string[3] = "against";
$string[4] = "him";
$output = array_map('strrev', $string);
sort($output);
$sorted = array_map('strrev', $output);
var_dump($sorted);
编辑:还不能评论:
尽管LastShadow的解决方案迭代次数较少;请记住,它只会比较最后一个字符。因此,一旦您有多个相同的字符,存储就不正确了。解决关系的规则是什么?使用usort,然后应用您想要的任何逻辑,您自己在哪里努力解决这个问题?这一主题已被广泛讨论。你至少应该有足够的信息来开始。你能给我解释一下这个usort函数吗?@ShaluAwzme我链接的php文档在这方面会比我做得更好。