2012-06-02 111 views
1

所以我有一個關聯數組,我想從它返回2個隨機值。 此代碼只返回1個數組值,它是4個隨機數中的任意一個。從關聯數組中選擇2個隨機元素

$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這樣的東西?

+0

當然,你會得到錯誤。如果你傳遞第二個參數,你會得到一組鍵(如[documentation](http://www.php.net/manual/en/function.array-rand.php)所述),這不是有效索引。 http://codepad.org/Maf1EarJ –

+0

可能的重複[獲取數組中的隨機值的子集](http://stackoverflow.com/questions/3504401/get-a-subset-of-random-values- from-an-array-php)和[許多其他問題](http://stackoverflow.com/search?q=php+get+n+random+elements+from+array)。 –

回答

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

+0

與這一個,因爲它是最快的,完美無瑕的作品! – Wonka

+0

@Wonka - 很高興能幫到您:) – nickb

+0

@Downvoter - 有何評論? – nickb

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

檢查array_rand here的PHP文檔。

+1

1.第三行末尾有一個額外的圓括號,並且2.這隻會選擇2個隨機密鑰,而不是原始數組的值。 – nickb

+0

修復之前,你張貼:) – Jeshurun

+0

@Jeshurun感謝您的幫助:)但nickb正確發佈,兩個非常好的答案! – Wonka

-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()和freind更有效。

+0

'array_rand'應該是有效的,但是。 – Joey

+0

應該是 - 我只是沒有在手! –

相關問題