php - PHP数组字母排序以匹配MySQL顺序
问题描述
鉴于我有一个数组
['test', 'te', 'tes', 'z'];
并使用 PHPsort()
函数,我得到以下结果
数组( [0] => te [1] => tes [2] => 测试 [3] => z )
但我想要实现的是这个
['test', 'tes', 'te', 'z'];
我查看了排序函数的文档,找不到正确的排序标志来实现它。
解决方案
对列表进行排序,然后构建一个新数组,其中键作为第一个字符,值作为以该字符开头的单词列表。然后对这些单词列表进行反向排序并再次合并数组。
<?php
$items = [
'foolhardy',
'foo',
'foolish',
'fool',
'football',
'footbridge',
'apple'
];
sort($items);
var_export($items);
foreach($items as $item) {
$tmp[$item[0]][] = $item;
}
foreach($tmp as &$v) {
rsort($v);
}
$out = array_merge(...array_values($tmp));
var_export($out);
输出:
array (
0 => 'apple',
1 => 'foo',
2 => 'fool',
3 => 'foolhardy',
4 => 'foolish',
5 => 'football',
6 => 'footbridge',
)array (
0 => 'apple',
1 => 'footbridge',
2 => 'football',
3 => 'foolish',
4 => 'foolhardy',
5 => 'fool',
6 => 'foo',
)
或者,您可以使用 usort 和 spaceship 比较运算符来执行此操作。比较项目,如果它们以相同的字母开头反向排序,否则按字母顺序排序:
<?php
usort($items, function($a, $b) {
return
$a[0] === $b[0]
? $b <=> $a
: $a <=> $b;
});
推荐阅读
- sql - 如何在 SQL Server 中基于无条件将行从一列绑定到另一列
- arrays - 具有可变长度的数组元素的格式输出
- xamarin - Xamarin.Forms - ListView 无法加载整个 ViewCell
- c# - 用户选择一个项目并搜索一个数组以查找并计算所有被选中项目的出现次数
- php - 永久链接结构更改后 PHP 未运行 (WORDPRESS)
- c++ - 如果我的班级成员的类型与类型匹配,如何进行编译时 type_check 并仅编译我的班级的一部分?
- python - 如何以随机顺序打印列表中的单词,以便每个单词只打印一次(使用 Python)
- android - 如果我使用异步任务,OnDestroy 方法不起作用
- ios - QueryEndingAtValue 函数在 Swift firebase 中无法正常工作
- spring - 如何在spring-boot中实现JWT令牌中的用户信息?