2016-09-26 40 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