我正在尝试对数组进行排序,但它并不像我想要的那样工作。
我的代码如下。
<?php
$classroom = array("4/10","4/2","4/1","4/11","5/2","1/2","5/1","5/10","5/12");
sort($classroom);
print_r($classroom);
?>
结果是:
Array ( [0] => 1/2 [1] => 4/1 [2] => 4/10 [3] => 4/11 [4] => 4/2 [5] => 5/1 [6] => 5/10 [7] => 5/12 [8] => 5/2 )
我想把它归类为:
1/2,4/1,4/2,4/10,4/11,5/1,5/2,5/10,5/12
我对排序功能很陌生。你能给我一个使用usort的例子吗?
答案 0 :(得分:0)
我认为您正在比较sort()
函数中的字符串。在比较之前,您应首先将转换 float 值:
function fracstr_to_float($str) {
$num = intval(explode("/", $str)[0]);
$den = intval(explode("/", $str)[1]);
return $num/$den;
}
注意:我认为你的字符串是分数,而不是日期。
答案 1 :(得分:0)
巧合natsort
似乎有效:
<?php
$classroom = array("4/10","4/2","4/1","4/11","5/2","1/2","5/1","5/10","5/12");
natsort($classroom);
print_r($classroom);
打印:
Array
(
[0] => 1/2
[1] => 4/1
[4] => 4/2
[2] => 4/10
[3] => 4/11
[5] => 5/1
[8] => 5/2
[6] => 5/10
[7] => 5/12
)
完全披露:我不是100%确定它适用于所有用例,我还没有测试过。请谨慎使用。
答案 2 :(得分:0)
使用usort应该适用于所有情况。它允许我们使用自定义函数来定义数组元素之间的比较。在我们的自定义函数中,我们应该首先将这两个元素从fraction转换为float
{{1}}