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

So I have an associative array and I want to return 2 random values from it. This code only returns 1 array value, which is any of the 4 numbers at random.

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

How can I return 2 comma separated values from the array values only? Something like 3,4?

Grab the keys from the array with array_keys(), shuffle the keys with shuffle(), and print out the values corresponding to the first two keys in the shuffled keys array, like so:

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

Demo

Or, you can use array_rand()'s second parameter to grab two keys, like so:

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

Demo

array_rand takes an additional optional parameter which specifies how many random entries you want out of the array.

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

Check the PHP documentation for array_rand here.

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

Should be more efficient than shuffle() and freinds, if the array is large.