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

3

假设我有以下数组:

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

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

我尝试了以下代码,它可以给我"one"、"three"或者"five"。

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

然而我似乎无法随机生成密钥,因此它会随机选择一种颜色,然后在该颜色中随机选择一个数字。我显然有些迷茫。有人能为我解惑吗?谢谢。

2个回答

10

在这种情况下获取随机元素的简短方式:

$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

谢谢你,讲解得很好。 - Whitenoise
1
希望它会有用。 - sergio

8

array_rand() 函数将随机化整个数组。这意味着它将

  • 消耗大量的熵(entropy)
  • 如果数组很大,会使用相当多的 CPU 资源
  • 创建数组的副本,占用内存。

因此我更喜欢

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

编辑

如果不清楚的话,上述函数适用于任何维度,即使大小不同(非正方形/立方体)。


太棒了!(喜欢递归。) - Marty McVry
这个无法与上述数组一起使用,它只能在有键时使用。如何调整才能使其也适用于值作为键的情况? - Whitenoise
函数内的适应性是 $res=$array[array_keys[$pos]]; - Eugen Rieck
我无法让上述内容正常工作,因为当我尝试$res=$array[array_keys($pos)]时,出现了一个与$pos是整数而不是数组有关的错误。然而,我稍微改变了我的做法,所以它仍然很有用。谢谢。 - Whitenoise
1
@Whitenoise 应该是 array_keys($array)[$pos] - Eugen Rieck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接