我通过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");
......有人可以帮忙吗?有可能解决这个问题吗?任何帮助将不胜感激。
提前致谢。
答案 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)的元素时,这应该会发生。因为否则您将获得有关访问不存在的数组索引的注意事项。 (你的样本给出了一个这样的通知)