PHP - usort函数太慢了

时间:2013-06-22 21:34:14

标签: php usort

我通过usort()函数处理更长的PHP数组时遇到问题。 我想用40-50个元素对数组进行排序,如“1.1”,“2.3”,“1.1.2”,“3.1”,30,“3.10”...... 如果我只进行一些元素,一切正常。但是如果我有一个包含40个元素的数组,那么这个函数太慢了 - 太慢了,甚至超过了90秒的超时......

我的代码:

function mySort($a,$b) {
    $a_arr = explode(".",$a);
    $b_arr = explode(".",$b);

    if ($a_arr[0] < $b_arr[0]) {return -1;break;}
    if ($a_arr[0] > $b_arr[0]) {return 1;break;}

    for($i=0;$a_arr[$i]==$b_arr[$i];$i++){
        if ($a_arr[$i+1] < $b_arr[$i+1]) {return -1;break;}
        if ($a_arr[$i+1] > $b_arr[$i+1]) {return 1;break;}
    }
  }

$sort_array = array("1.1","2.3","1.1.2","3.1","30","3.10"); //example, I take this data from the database

usort($sort_array,"mySort");

......有人可以帮忙吗?有可能解决这个问题吗?任何帮助将不胜感激。

提前致谢。

2 个答案:

答案 0 :(得分:2)

function mySort($a,$b) {
    return version_compare($a,$b);
}

$sort_array = array("1.1","2.3","1.1.2","3.1","30","3.10");    
usort($sort_array,"mySort");

var_dump($sort_array);

甚至只是

$sort_array = array("1.1","2.3","1.1.2","3.1","30","3.10");    
usort($sort_array,"version_compare");

var_dump($sort_array);

答案 1 :(得分:1)

当数组中的值相等时,您的循环不会退出。在某处添加return 0子句以表示数组的两个元素何时相等。

当你没有任何一个列表(a,b)的元素时,这应该会发生。因为否则您将获得有关访问不存在的数组索引的注意事项。 (你的样本给出了一个这样的通知)