在php中按数组的最后一个字符对数组列表进行排序

在php中按数组的最后一个字符对数组列表进行排序,php,Php,在PHP中,如何根据数组值的最后一个字符对数组进行排序?以以下数组为例: $string[0] = "They"; $string[1] = "started"; $string[2] = "plotting"; $string[3] = "against"; $string[4] = "him"; 排序后,数组将如以下注释所示:基于每个值的最后一个字符的顺序。。。还要注意重写的索引: $str

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

$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文档在这方面会比我做得更好。