如何解决PHP 按自定义顺序排序
我正在尝试对数组进行排序,可以说:
['qwe',12,'*',324,'$we']
,但我希望它排序:首先是数字,最后是特殊字符和字母。
我知道我必须使用 usort()
,但不确定如何编写回调函数来实现我需要的功能。
有什么想法吗?
解决方法
如果您尝试对数组中的元素进行排序,而不是对元素本身中的字符进行排序,则可以使用以下丑陋但实用的解决方案:
$array = ['qwe',12,'*',324,'$we'];
$nums = $spec = $letters = array();
foreach ($array as $i) {
if (is_numeric($i)) {
array_push($nums,$i);
}
else if (ctype_alpha($i)) {
array_push($letters,$i);
}
else if (preg_match('/[\'^£$%&*()}{@#~?><>,|=_+¬-]/',$i)) {
array_push($spec,$i);
}
}
sort($nums);
sort($letters);
sort($spec);
$sorted = array_merge($nums,$spec,$letters);
var_dump($sorted);
这将遍历您的初始数组,并根据其类型(用于检测符号的正则表达式)将每个项目添加到不同的数组中。然后将单个数组按字母顺序排序,并按您喜欢的顺序合并。
上面的代码会输出:
array(5) {
[0]=>
int(12)
[1]=>
int(324)
[2]=>
string(3) "$we"
[3]=>
string(1) "*"
[4]=>
string(3) "qwe"
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。