2014-01-26 5 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() будет рандомизация полного массива. Это означает, что он будет

  • потребляет много энтропии
  • Используйте довольно много процессора лошадиных сил, если массив большого
  • создать копию массива, используя оперативную память.

Так что я предпочитаю

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

и, конечно,

echo getrandomelement($var); 

EDIT

В случае, если это не ясно, то данная функция будет работать для любого размера, даже с разные размеры (не квадрат/куб).

+0

Замечательное решение! (Love the recursivity.) –

+0

Это не работает с указанным выше массивом, оно работает только при наличии ключей. Как это можно адаптировать для работы со значениями для ключей? – Whitenoise

+0

Адаптация '$ res = $ array [array_keys [$ pos]];' внутри функции –

Смежные вопросы