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

问题描述 投票:0回答:4

我在 PHP 中有一个关联数组,想要从中选择一个随机键/值对。这是我到目前为止所拥有的:

初始化。

$locations = array();

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

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

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

$rand = array_rand($locations);

兰德只是一个数字。所以locations[$rand]给了我类似的东西:

'1' => 'Location 1'

好的,很好,一个关联数组元素。此时,我不知道这个 assoc 数组的键,所以我尝试了以下操作:

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 衬垫可以从数组中提取随机键/值对。或者我的语法已经关闭。我非常感谢您的帮助。

php random associative-array
4个回答
40
投票
$array = array('a' => 1, 'b' => 2);
$key = array_rand($array);
$value = $array[$key];

您的问题在

array_push($locations, "'$location_id' => '$location_name'");
。这样做:
$locations[$location_id] = $location_name;
。然后
array_rand($location)
会返回一个随机的
$location_id;
,你可以通过
$name = $locations[$location_id]
获得名称。


6
投票

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

$location_name = $locations[$rand];

获取位置名称。


这是一个完整的示例:http://codepad.org/zR2YdMGN

只需点击几次提交,您就会看到随机的工作。


1
投票

你的推错了

$locations[$location_id] = $location_name;

应该是

所以,在你的问题中选择随机元素没有任何意义。
总是调试你的代码,只是为了在使用它之前看看你是否有正确的数据


1
投票

只需一行即可完成:


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

您将立即获得值而不是密钥。

© www.soinside.com 2019 - 2024. All rights reserved.