我正在尝试对数组进行排序。
我有一个数据数组,其中每一行表示数组中的一个新索引。我需要按第一个数字降序排列。
我的阵列:
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