PHP 按自定义顺序排序

时间:2021-02-26 14:54:58

标签: php usort

我正在尝试对数组进行排序,可以说:

['qwe',12,'*', 324, '$we'],但我希望它排序:首先是数字,最后是特殊字符和字母。

我知道我必须使用 usort(),但不确定如何编写回调函数来实现我需要的功能。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果您尝试对数组中的元素进行排序,而不是对元素本身中的字符进行排序,则可以使用以下丑陋但实用的解决方案:

$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"
}