2016-11-24 2 views
0

が、私はこれを持って、これまでPHPリターン無作為化配列

//Select a random number 
$random_number = (rand(2,10)); 

// Setup an array of names 
$names = array("john", "joe", "simon", "peter", "paul"); 

// Create new array 
$random_field_names = array_rand($names, $random_number); 

print_r($random_field_names); 

これは私のように見える配列を与えますこの

Array 
(
    [0] => 0 
    [1] => 10 
    [2] => 11 
) 

どこが間違っていますか? 5行目

+0

はあなたが所望の出力になりたいものの例を追加することはできますか?私はあなたがしようとしていることについて少し混乱しています。 – kunruh

答えて

1
あなたは(私は太字で強調)の名前を取得しない理由 array_randの説明は説明

おすすめの1か配列からよりランダムなエントリを取り出し、ランダムなエントリのキー(またはキー)を返します。

値が必要なようです。結果は、元のキーを維持し

$random_number = rand(2,5); 
$names = array("john", "joe", "simon", "peter", "paul"); 
$result = array_intersect_key($names, array_flip(array_rand($names, $random_number))); 
print_r ($result); 

注:

array_intersect_key($names, array_flip(array_rand($names, $random_number))); 

はまた、あなたの乱数が配列のサイズよりも大きくないことを確認してください:あなたはこのように達成できること。あなたは、インデックス0から始まるインデックス付きの配列を取得するためにキーを付け直すにしたい場合は、その結果にarray_valuesを適用します。

$result = array_values(array_intersect_key($names, array_flip(array_rand($names, $random_number)))); 
+0

$ result [1]を使って新しい配列から項目を抽出しようとすると結果は得られませんが、これは新しい配列の作成方法と関係していますか? – fightstarr20

+1

実際、結果配列は元のキーを保持します。私の答えに加えてください。 – trincot

+0

大変ありがとうございます – fightstarr20

1
  1. 構文エラー - "simon
  2. array_rand()戻っランダムキー(s)は、後に不足している引用符ではない値
  3. rand(2,10)配列内の唯一の5項目があるとして、すべてのケースでは動作しません。 PHP docs:配列内の要素より多くの要素を選択しようとすると、E_WARNINGレベルのエラーが発生し、NULLが返されます。

アレイ全体をランダム化する場合は、shuffle()を使用してください。

2

必要な値を取得するには、キーを使用します。

//Select a random number 
$random_number = (rand(2,10)); 

// Setup an array of names 
$names = array("john", "joe", "simon", "peter", "paul"); 

// Create new array 
$random_field_names = array_rand($names, $random_number); 

print_r($names[$random_field_names]);