-1

usort() 関数を使用して長い PHP 配列を処理する際に問題が発生しました。「1.1」、「2.3」、「1.1.2」、「3.1」、30、「3.10」のように、40 ~ 50 個の要素を持つ配列を並べ替えたい...いくつかの要素だけを進めれば、すべて正常に動作します。しかし、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

配列に等しい値がある場合、ループは終了しません。配列の 2 つの要素が等しいことを示すために、どこかに return 0 句を追加します。

いずれかのリスト (a、b) のいずれかの要素が不足している場合に、おそらく発生するはずです。そうしないと、存在しない配列インデックスへのアクセスに関する通知が表示されるためです。(あなたのサンプルはそのような通知を1つ提供します)

于 2013-06-22T21:39:52.617 に答える