2016-11-24 165 views
0

我想從現有的一個新的陣列的記錄2和10之間的隨機數,我有這個迄今爲止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說明解釋爲什麼你沒有得到的名字(我用粗體強調):

精選一個或數組中的隨機條目更多,並返回隨機條目的密鑰(或密鑰)

你似乎想要的值。就可以達到這樣的:

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

另外,還要確保你的隨機數不超過數組大小時:

$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); 

注意,結果維持原來的鑰匙。如果要重新編號的鑰匙,得到一個索引數組從索引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()回報隨機密鑰(一個或多個),缺失報價不值
  3. rand(2,10)不會在所有情況下工作,因爲只有5陣列中的條目;來自PHP的文檔:試圖挑選比數組中更多的元素將導致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]);