現在位置: よかブロ > 糟屋郡新宮町周辺の情報 > 私的日記 > 多次元配列をランダムに抽出するにはarray_rand()が良いかも

よかブロ
5月1日 20:06 - 新宮町 - 新宮町 ドアール美容室 【送迎サービス可】
勉強会〜

2013年8月13日 9:32 PM

多次元配列をランダムに抽出するにはarray_rand()が良いかも

記事のテーマ:私的日記

配列でも多次元配列でも、ランダムにデータを抽出したい時、配列をシャッフルしてそこから抽出するやり方があります。でも全ての値ではなく指定した数だけ抽出したい時はforeachは使えません。foreachでまわしてその中に分岐を作ってbreakするやり方もあるようですが、ifの分岐ってそこそこ負荷が高かったような・・・例えば

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
for($i=0; $i<500000; $i++) {
$test_array[] = $i;
}
//50万の数字を入れた配列
$start = microtime(true);
//計測スタート
$i=1;
//ループを抜けるための変数
shuffle($test_array);
//シャッフルをここでする
foreach($test_array as $value) {
//ランダムにした値をまわす
 
if($i >300000) { break; }
//30万回まわしたらループを抜ける
$i++;
//変数を足す
 
}
$end = microtime(true);
//計測終了
$time = $end - $start;
//時間計算
echo $time;
//約0.25秒と出ました。

結果は約0.25秒。一方でarray_rand()を使った場合、

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
for($i=0; $i&lt;500000; $i++) {
$test_array[] = $i;
}
//50万の数字を入れた配列
 
$start = microtime(true);
//計測スタート
 
$random =array_rand($test_array,300000);
//ランダムに3万を抜粋
 
foreach ($random as $value) {
 
//ランダムにした値をまわす
}
$end = microtime(true);
//計測終了
$time = $end - $start;
//時間計算
echo $time;
//約0.11秒と出ました。

約0.11秒。比べると早いのはarray_rand()です。スクリプトもスマートだし。でもそれでも他の言語に比べると遅いんだろうな・・・

 

 

 

よかブロで自分の事を書くとこんな記事ばかりになります・・・
aa


にほんブログ村 地域生活(街) 九州ブログへ

あわせて読みたい