-1

我在通过 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");

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

提前致谢。

4

2 回答 2

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);
于 2013-06-22T21:48:15.220 回答
1

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

当您没有任何列表(a,b)的元素时,这可能会发生。因为否则您将收到有关访问不存在的数组索引的通知。(您的样本给出了这样的通知)

于 2013-06-22T21:39:52.617 回答