PHP如何从多维数组中获取随机元素?

Whi*_*ise 1 php arrays multidimensional-array

说我有以下数组:

$var = array( 
"green" => array("one", "two"), 
"red" => array("three", "four"),
"yellow" => array("five", "six")
);
Run Code Online (Sandbox Code Playgroud)

我需要编写什么代码才能生成任意数字的随机输出?

我试过以下,这将给我"一","三"或"五".

$section = array_rand($var);
echo $var[$section][0];
Run Code Online (Sandbox Code Playgroud)

但是我似乎无法将密钥随机化,因此它将随机选择一种颜色,然后随机选择该颜色内的数字.我显然有一个昏暗的时刻.任何人都可以开导我吗?谢谢.

Eug*_*eck 6

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;
}
Run Code Online (Sandbox Code Playgroud)

而且当然

echo getrandomelement($var);
Run Code Online (Sandbox Code Playgroud)

编辑

如果不清楚,上述功能适用于任何尺寸,即使尺寸不同(非方形/立方体).


ser*_*gio 5

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
Run Code Online (Sandbox Code Playgroud)