自定义PHP排序


Custom PHP Sort?

我正在尝试对数组进行排序。

我有一个数据数组,其中每一行表示数组中的一个新索引。我需要按第一个数字降序排列。

我的阵列:

7[^.^]username[^.^]idnumber[^.^]State[^.^]
13[^.^] username[^.^] idnumber[^.^] State[^.^]
9[^.^] username[^.^] idnumber[^.^] State[^.^]
19[^.^] username[^.^] idnumber[^.^] State[^.^]

ksort和asort都是有效的,但它认为"9"大于"81",所以它会返回以下内容:

13[^.^] username[^.^] idnumber[^.^] State[^.^]
19[^.^] username[^.^] idnumber[^.^] State[^.^]
7[^.^]username[^.^]idnumber[^.^]State[^.^]
9[^.^] username[^.^] idnumber[^.^] State[^.^]

我知道我需要某种自定义排序,但我不确定如何。谢谢

所有PHP sort()函数都可以将sort_flags作为第二个参数。尝试使用SORT_NUMERIC:

sort($myArray, SORT_NUMERIC);

或者使用usort()进行自定义排序回调

usort($array, function ($a, $b) { return (int)$a - (int)$b; });

这种情况之所以会发生,是因为将"13[^.^]username[^.^]…"强制转换为int会截断第一个非int字符之后的任何字符。

不过,您可能应该更好地预处理您的"数组",将该数值分离到自己的数组索引中。

PHP提供了一个名为usort()的函数,用于创建用户定义的排序。它的工作原理是创建一个比较函数,根据被比较的两个值以及您如何定义逻辑,该函数将返回1、0或-1。

以下是文档中的示例:

<?php
function cmp($a, $b)
{
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}
$a = array(3, 2, 5, 6, 1);
usort($a, "cmp");
foreach ($a as $key => $value) {
    echo "$key: $value'n";
}
?> 

哪个输出:

0: 1
1: 2
2: 3
3: 5
4: 6