我正在尝试对数组进行排序。
我有一个数据数组,其中每一行代表数组中的一个新索引。我需要按照第一个数字对它进行降序排序。
我的阵列:
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[^.^]
我知道我需要某种自定义排序,但我不确定如何。感谢。
答案 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