从关联数组中选择2个随机元素

时间:2012-06-02 23:07:00

标签: php arrays random

所以我有一个关联数组,我想从中返回2个随机值。 此代码仅返回1个数组值,该值是随机的4个数字中的任意一个。

$array = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4);
$key = array_rand($array); //array_rand($array,2); Putting 2 returns Illegal offset type
$value = $array[$key];
print_r($value); //prints a single random value (ex. 3)

如何仅从数组值返回2个逗号分隔值?有点像3,4?

3 个答案:

答案 0 :(得分:5)

array_rand接受一个额外的可选参数,该参数指定您希望从数组中输出多少随机条目。

$input_array = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4);
$rand_keys = array_rand($input_array, 2);
echo $input_array[$rand_keys[0]] . ',' . $input_array[$rand_keys[1]];

检查PHP文档中的array_rand here

答案 1 :(得分:1)

使用array_keys()从数组中获取密钥,使用shuffle()对密钥进行随机播放,并打印出与随机密钥数组中前两个密钥对应的值,如下所示:

$array = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4);
$keys = array_keys( $array);
shuffle( $keys);
echo $array[ $keys[0] ] . ',' . $array[ $keys[1] ];

Demo

或者,您可以使用array_rand()的第二个参数来获取两个键,如下所示:

$array = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4);
$keys = array_rand( $array, 2);
echo $array[ $keys[0] ] . ',' . $array[ $keys[1] ];

Demo

答案 2 :(得分:-1)

$a=rand(0,sizeof($array));
$b=$a;
while ($a==$b) $b=rand(0,sizeof($array));

$ar=array_values($array);
$element1=$ar[$a];
$element2=$ar[$b];

如果数组很大,应该比shuffle()和朋友更有效率。