2014-01-26 109 views
1

說我有以下數組:PHP如何從多維數組中獲取隨機元素?

$var = array( 
"green" => array("one", "two"), 
"red" => array("three", "four"), 
"yellow" => array("five", "six") 
); 

我需要什麼樣的代碼編寫產生任何數字的隨機輸出?

我試過以下,這會給我「一」,「三」或「五」。

$section = array_rand($var); 
echo $var[$section][0]; 

但是我似乎無法隨機化的關鍵,所以它會隨機選擇一種顏色,然後隨機選擇的顏色範圍內的數字。我顯然有一個昏暗的時刻。任何人都可以啓發我嗎?謝謝。

回答

4

在這種情況下The short way to get random element

$var = array( 
"green" => array("one", "two"), 
"red" => array("three", "four"), 
"yellow" => array("five", "six") 
); 

$section = array_rand($var); //here yoy get random first of array(green or red or yellow) 
echo $var[$section][array_rand($var[$section])]; //here you get random element of this array 
+0

謝謝你,很好的解釋。 – Whitenoise

+0

希望它會有用) – sergio

4

array_rand()將隨機化的完整陣列。這意味着它將

  • 消耗大量的熵
  • 使用相當多的CPU馬力,如果陣列是大
  • 創建數組的副本,使用的RAM。

所以我更喜歡

function getrandomelement($array) { 
    $pos=rand(0,sizeof($array)-1); 
    $res=$array[$pos]; 
    if (is_array($res)) return getrandomelement($res); 
    else return $res; 
} 

和ofcourse

echo getrandomelement($var); 

編輯

如果這是不明確,上述功能適用於任何尺寸的工作,即使有不同的尺寸(非方形/立方體)。

+0

精彩的解決方案! (Love the recursivity。) –

+0

這不適用於上面的數組,它只在有鍵時才起作用。這怎麼能適應與鍵值一起工作呢? – Whitenoise

+0

自適應是'$ res = $ array [array_keys [$ pos]];'函數內部 –