Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP如何从多维数组中获取随机元素?_Php_Arrays_Multidimensional Array - Fatal编程技术网

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

PHP如何从多维数组中获取随机元素?,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,假设我有以下数组: $var = array( "green" => array("one", "two"), "red" => array("three", "four"), "yellow" => array("five", "six") ); 我需要编写什么代码来生成任意数字的随机输出 我试过下面的方法,可以得到“一”、“三”或“五” 然而,我似乎不能随机化的关键,所以它会随机选择一种颜色,然后随机选择一个数字在该颜色。很明显,我现在心情不好。谁能启发我?谢谢。在这

假设我有以下数组:

$var = array( 
"green" => array("one", "two"), 
"red" => array("three", "four"),
"yellow" => array("five", "six")
);
我需要编写什么代码来生成任意数字的随机输出

我试过下面的方法,可以得到“一”、“三”或“五”


然而,我似乎不能随机化的关键,所以它会随机选择一种颜色,然后随机选择一个数字在该颜色。很明显,我现在心情不好。谁能启发我?谢谢。

在这种情况下,获取随机元素的捷径是:

$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
array\u 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;
}
当然

echo getrandomelement($var);
编辑


如果不清楚,上述函数将适用于任何尺寸,即使是不同尺寸(非正方形/立方体)。

非常好的解决方案!(喜欢递归性。)这对上面的数组不起作用,它只在有键的情况下起作用。如何对其进行调整以同时处理键的值?调整是
$res=$array[array_keys[$pos]]
在函数内部,我无法使上述操作正常工作,因为当我尝试
$res=$array[array\u keys($pos)]
时,我遇到了一个错误,与$pos是整数而不是数组有关。然而,我已经调整了我正在做的一点,所以它仍然是有用的。谢谢。@Whitenoise它应该是
array\u key($array)[$pos]
谢谢你的帮助,也解释得很好。希望有用)
echo getrandomelement($var);