2016-09-26 27 views
1

我有值的數組,PHP - 如何顯示在數組值隨機

$member[1] = "John"; 
$member[2] = "Mary"; 
$member[3] = "Berry"; 
$member[4] = "James"; 
$member[5] = "Lincoln"; 

,我可以告訴他們隨意使用

echo $member[rand(1,5)]; 
echo $member[rand(1,5)]; 
echo $member[rand(1,5)]; 
echo $member[rand(1,5)]; 
echo $member[rand(1,5)]; 

但是這樣一來,成員可以出現兩次或更! 什麼是正確和專業的方式來顯示他們只有一次隨機?

+2

'洗牌($成員); foreach($ member as $ member){echo $ member; }'Shuffle會隨機化一個數組元素的順序:[Shuffle()](http://php.net/manual/en/function.shuffle.php) – icecub

回答

1

如果要按隨機順序使用整個陣列,請使用shuffle

shuffle($member); 

foreach($member as $memberName) { 
    echo $memberName; 
} 

如果你想隨意使用array_rand選擇從陣列中的一個或多個元素。

假設你想從數組中隨機選擇3個成員,保證你永遠不會選擇相同的數組值兩次。

foreach(array_rand($member, 3) as $key) { 
    echo $member[$key]; 
} 
+1

實際上,我只是使用OPs變量名來保證一致性,但是我在第二個例子中使用了'$ members'而不是'$ member'。謝謝。 – Sherif

1

另一個選擇,

$random_keys=array_rand($member,count($member)); 
echo $member[$random_keys[0]]; 
echo $member[$random_keys[1]]; 
echo $member[$random_keys[2]]; 
echo $member[$random_keys[3]]; 
echo $member[$random_keys[4]]; 
+1

請注意,這樣做會給你同樣的結果,以''member'中元素的順序,因爲'array_rand'給你隨機選擇,而不是隨機分佈。所以當你想以隨機順序使用整個數組時,最好使用'shuffle',但如果你想要有限的隨機選擇而不是隨機分配,'array_rand'可以正常工作。此外,當它應該是'echo $ member [$ random_keys [0]]'時​​,您正在使用'echo $ a [[$ random_keys [0]]''。 – Sherif

+0

@謝里夫感謝您的評論。你是對的...如果我們想按隨機順序排列整個數組,最好只使用'shuffle'。當我們想限制隨機選擇時,我們可以使用'array_rand'。 – Naga

+0

它不必受限制。我只是指出它是隨機選擇而不是隨機分配。即如果你願意,你可以「洗牌($ random_keys)」。我的措辭可能有點模棱兩可。通過限制,我的意思是'array_rand()'將選擇範圍限制爲可用鍵集。這樣你永遠不會得到相同的密鑰兩次。 – Sherif