数组排序不会按预期方式运行

时间:2016-10-13 09:53:32

标签: php sorting

我正在尝试对数组进行排序,但它并不像我想要的那样工作。

我的代码如下。

<?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的例子吗?

3 个答案:

答案 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}}