1

私は、非常に大きな配列とその値の多くの反復を扱う研究用のアプリケーションを作成しています。計算時間を短縮するために、コードにいくつかの改善を実装しています。現在、いくつかの改善を行った後でも、計算時間はまだ少し長いです。関数は、計算時間のほぼ半分array_key()を消費する関数です。それに代わるより良いものはありますか?

改善が必要なものの単純なバージョン (反復ループなし) の例を作成しています。

$bigArray=array_fill(0,1000000,0);
for($i=0;$i<10;$i++){
    $rnd=mt_rand(0,1000000);
    $bigArray[$rnd]=1;
}

$start=microtime(true);
$list=array_keys($bigArray,1);
$end=microtime(true);

echo $end-$start;

結果は0.021490097045898数秒程度です。これを行うためのより速い方法を知っている人はいますか?この種の計算には数十万回のラウンドが必要であり、場合によっては 30 秒に達し、その半分はarray_key()上記の関数に使用されるため、非常に小さな改善でも役立ちます。

ところで、私はデュアル コア (Intel) E8500 @3.16GHz、3.17GHz、8Gb RAM でスクリプトを実行しています。OS は Windows 7 64 ビットです (念のため)。

前もって感謝します。

4

1 に答える 1

0

クレジットはコメントから @Wikken に送られます。

本当に 1 と 0 だけの場合、array_filter() はここで array_keys() の約 2 倍の速度で実行されます。

それは本当に役に立ち、仕事をすばやく実行します。私の場合、時間を 20% 短縮しました。ありがとうウィッケン!

于 2013-05-23T22:45:34.367 に答える