自定义PHP排序?

问题描述:

我想排序数组。自定义PHP排序?

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

我的数组:

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

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

+1

这是一种什么样的PHP数组?我看到它有16张脸。你应该发布'print_r'或'var_dump'的输出...... – Paulpro 2012-03-21 04:59:41

+0

你可能可以用natsort逃脱:http://www.php.net/manual/en/function.natsort.php – Paulpro 2012-03-21 05:01:18

所有PHP sort()函数可以采取sort_flags改变作为其第二个参数。尝试使用SORT_NUMERIC

sort($myArray, SORT_NUMERIC);

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

+0

sort ($ myArray,SORT_NUMERIC);是完美的,但我可以让它下降,而不是上升? – Chase 2012-03-21 12:04:27

+0

array_reverse($ array,true);可以工作,但我认为这对大量数据来说会很慢。 – Chase 2012-03-21 12:06:59

+1

使用['rsort($ array,SORT_NUMERIC)'](http://www.php.net/manual/en/function.rsort.php):) – jmlnik 2012-03-21 12:09:29

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 

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

出现这种情况的工作,因为铸造“13 [^^]用户名[^^] ... “到一个int将在第一个非int字符后切断任何东西。

尽管您应该更好地预处理您的“数组”,以将该数值分隔为其自己的数组索引。