2011-08-26 132 views
15

我在PHP中有一个关联数组,并且希望从中选择一个随机的键/值对。这是我到目前为止:从PHP关联数组中选择一个随机元素

初始化。

$locations = array(); 

遍历一个SQL查询,并添加键/缬氨酸对:

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

后来,我选择阵列的随机指数:

$rand = array_rand($locations); 

兰特只是一个数字。所以位置[$兰特]给了我类似的东西:

'1' => 'Location 1' 

好,一个assoc数组元素。在这一点上,我不知道这ASSOC阵的钥匙,所以我尝试了以下几件事:这3次工作

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

无。他们都抛出像“通过变量不是数组”的错误。

我确定有一些简单的1班轮可以从数组中抽取一个随机的键/值对。或者我的语法关闭。我真的很感激帮助。

回答

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

你的问题是'array_push($ locations,''$ location_id'=>'$ location_name'“) ;'。代之以:'$ locations [$ location_id] = $ location_name;'。然后'array_rand($ location)'将返回一个随机的'$ location_id';你可以用'$ name = $ locations [$ location_id]'来获取名字。 – arnaud576875

+0

你们都是正确的,当然 - 我只是选择了这一个BC我最好的工作与示例代码。是的,我非常尴尬的推动不正确。我在Perl中编写了一吨(w哈希),所以我应该知道更好!谢谢! – Jeff

+0

不错,你救了我的一天 – RezaSh

1

你推错了

$locations[$location_id] = $location_name; 

应该

所以,没有什么关于你的问题选择随机元素。
总是调试代码,只是为了看看,如果你使用它

4

array_rand()返回该数组,而不是价值的关键前有正确的数据。您可以使用:

$location_name = $locations[$rand]; 

获取位置名称。


这里有一个完整的例子:http://codepad.org/zR2YdMGN

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

+0

这仍然没有给出关键。 –

+0

@M_rk钥匙在'$ rand' – Paulpro

+0

好的,对不起。然后来自OP的声明('$ rand'只是一个数字)是错误的。我很愚蠢,不能证实这一说法。 –

相关问题