自定义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[^.^]
我知道我需要某种自定义排序,但我不知道如何。谢谢。
答
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字符后切断任何东西。
尽管您应该更好地预处理您的“数组”,以将该数值分隔为其自己的数组索引。
这是一种什么样的PHP数组?我看到它有16张脸。你应该发布'print_r'或'var_dump'的输出...... – Paulpro 2012-03-21 04:59:41
你可能可以用natsort逃脱:http://www.php.net/manual/en/function.natsort.php – Paulpro 2012-03-21 05:01:18