2016-04-25 19 views
0

PHPの配列からランダムな値の配列を取得する最も簡単でクリーンな方法は何ですか?ランダムなキーの配列を取得するのは簡単ですが、すぐに値の配列を取得するためにそこに機能していないようですPHPの別の配列からランダムな値の配列を取得するもっとも簡単な方法

私が見つけた最も簡単な方法は次のとおりです。

$tokens = ['foo', 'bar', '...']; 
$randomValues = array_map(function($k) use ($tokens) { 
    return $tokens[$k]; 
}, array_rand($tokens, rand(7, 20))) 

これは$tokensから7-20ランダムな値を返します。変数。しかし、これは醜いように見え、それが何をしているのかは一目瞭然ではありません。

+1

あなたのコードは実際に動作しているので、これは[主要候補](http://codereview.stackexchange.com/help/on-topic)から[移動](http://meta.stackexchange.com/質問/ 85017 /別のスタック交換サイト#85041)をhttp://codereview.stackexchange.com/ –

+0

にシャッフルし、array_sliceを使用して、希望する値の数を取得します。 –

+1

繰り返し値を取得していないことを確認しますか?値が既に新しい配列に存在するかどうかを確認します。 –

答えて

2

場合配列$tokensを変更したくない場合は、ランダムに生成された配列キーを反転してarray_intersect_keyを使用します。私はそれがarray_mapの方法よりも読みやすいと思うが、それはかなり主観的だと思う。

$randomKeys = array_flip(array_rand($tokens, rand(7, 20))); 
$randomValues = array_intersect_key($tokens, $randomKeys); 

$tokensが変更された場合、あなたが気にしない場合は、シャッフル\スライス方法は非常に簡単と思われます。

+0

プラス1良い..... – AbraCadaver

1

だけシャッフルして、要素の乱数スライス:あなただけの別の変数を割り当て、それを使用、明らかにその配列を変更したくない場合は

shuffle($tokens); 
$result = array_slice($tokens, 0, rand(7, 20)); 

を:

$temp = $tokens; 
関連する問題