2017-08-30 8 views
-4

私はそれが私には、以下の配列からランダムな値を取得しようとしarray_rand使用されるような簡単なことだと思った:連想配列からランダムな値を返すPHP関数とは何ですか?

$array= Array ([0] => 126 [1] => 74); 
array_rand($array); 

しかし、それは私に語ったものを、0を返して、これは、この場合、右の関数ではありません。 array_randためのPHPのマニュアルによれば

+3

のようにそれを使用することができます –

+5

どうぞ、* [詳細なドキュメント](http://php.net/array_rand)をお読みください。 – deceze

+1

...登場した疑わしい回答の数で判断し、削除されてしまったので、OPはマニュアルを読んでいない唯一の人ではないようです。 – CD001

答えて

4

だけつのエントリを取得する場合、array_rand()はランダム エントリのキーを返します。それ以外の場合は、ランダムな項目のキーの配列が返されます。 これはランダムな値として と同様に配列からランダムキーを取り出すことができるように行われます。 配列内にあるよりも多くの要素を選択しようとすると、E_WARNINGレベルのエラーが発生し、NULLは が返されます。

この関数はの配列キーを返します。この場合、0が配列の有効なキーになります。

1

私は別のものを試してみると、はるかに良い結果を得ました。将来この問題に直面する人は、評判スコアが緩やかでなく、これを使用することもできます。

$array = array(1 => 'John', 2 => 'Paul',3 => 'Sarah',4 => 'Lilly'); 
$key = array_rand($array); 
echo $value = $array[$key]; 

やPHPのforeachの...

function array_random_assoc($arr, $num = 1) { 
$keys = array_keys($arr); 
shuffle($keys); 

$r = array(); 
for ($i = 0; $i < $num; $i++) { 
    $r[$keys[$i]] = $arr[$keys[$i]]; 
} 
return $r;} 

$a = array("a" => "apple", "b" => "banana", "c" => "cherry"); 
$randomnised_array= array_random_assoc($a); 

foreach($randomnised_array as $random_value){ 
echo $random_value; 
} 
+0

これを 'array_intersect_key($ a、array_flip(array_rand($ a、$ num)))'に置き換えることができます)... – deceze

+0

ありがとうございます。それを解決しました – alexis

+0

あなたの代わりの解決策は、配列をシャッフルして、関連付けられたキーを保持しています。それは疑問ではなかった。 https://stackoverflow.com/questions/4102777/php-random-shuffle-array-maintaining-key-value – Progrock

0

Array_rand()関数以外マニュアルから別の解決策は、配列ではない値のランダム鍵を戻すあります。あなたがあなたの答えを持っていただろう[マニュアル](http://php.net/manual/en/function.array-rand.php)を見ていたなら、私たちは以下の

$array= Array ([0] => 126 [1] => 74); 
$random_key=array_rand($array); 
echo $array[$random_key]; 
関連する問題