从PHP关联数组中选择一个随机元素


Selecting a random element from a PHP associative array

我在PHP中有一个关联数组,并希望从中选择一个随机的键/值对。以下是目前为止的内容:

初始化。

$locations = array();

循环执行SQL查询并添加键/值对:

array_push($locations, "'$location_id' => '$location_name'");

之后,我选择数组的随机索引:

$rand = array_rand($locations);

Rand只是一个数字。所以locations[$rand]给出了如下内容:

'1' => 'Location 1'

很好,一个关联数组元素。在这一点上,我不知道这个关联数组的键,所以我尝试了以下事情:

foreach($locations[$rand] as $loc_id => $location_name) { 
    echo "$key : $value<br/>'n";
}
$loc_id, $location_name = each($locations[$rand]);
$location_name = $locations[key($rand)];

这3次尝试都不成功。它们都会抛出诸如"传递的变量不是数组"之类的错误。

我敢肯定有一些简单的1衬里,可以从数组中取出一个随机的键/值对。或者我的语法错了。我真的很感激你的帮助。

$array = array('a' => 1, 'b' => 2);
$key = array_rand($array);
$value = $array[$key];

array_rand()从数组返回一个键,而不是一个值。你可以使用:

$location_name = $locations[$rand];

获取位置名称。


下面是一个完整的例子:http://codepad.org/zR2YdMGN

只需点击几次提交,您将看到随机工作

你的推错了

$locations[$location_id] = $location_name;

应该是

所以,在你的问题中没有选择随机元素的问题。
总是调试你的代码,在使用它之前看看你是否有合适的数据

你可以用一行来完成:


$randomValue = array_rand(array_flip(['value_1', 'value_2']))

您将立即获得值而不是键