自定义PHP排序?

时间:2012-03-21 04:56:42

标签: php sql sorting

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

我有一个数据数组,其中每一行代表数组中的一个新索引。我需要按照第一个数字对它进行降序排序。

我的阵列:

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[^.^]

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

3 个答案:

答案 0 :(得分:1)

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

sort($myArray, SORT_NUMERIC);

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

答案 1 :(得分:1)

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

这恰好可行,因为将“13 [^。^] username [^。^] ...”投射到int将会切断第一个非int字符后的任何内容。

您应该更好地预处理“数组”,但要将该数字值分隔为自己的数组索引。

答案 2 :(得分:0)

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