【问题标题】:Selecting a random element from a PHP associative array从 PHP 关联数组中选择一个随机元素
【发布时间】:2011-11-04 18:22:36
【问题描述】:

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

初始化。

$locations = array();

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

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

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

$rand = array_rand($locations);

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

'1' => 'Location 1'

好的,一个 assoc 数组元素。此时,我不知道这个 assoc 数组的 key,所以我尝试了以下方法:

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


    【解决方案1】:

    你的推错了

    $locations[$location_id] = $location_name;
    

    应该是

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

    【讨论】:

      【解决方案2】:

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

      $location_name = $locations[$rand];
      

      获取位置名称。


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

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

      【讨论】:

      • 这还是不给钥匙。
      • 好的,抱歉。那么来自 OP 的声明($rand 只是一个数字)是错误的。我太愚蠢了,没有验证这个说法。
      • @M_rk 它返回密钥 :) 我更新了我的答案,以便它具有指向 array_rand 的 PHP 手册页的链接
      【解决方案3】:
      $array = array('a' => 1, 'b' => 2);
      $key = array_rand($array);
      $value = $array[$key];
      

      【讨论】:

      • 您的问题出在array_push($locations, "'$location_id' =&gt; '$location_name'");。请改为:$locations[$location_id] = $location_name;。那么array_rand($location)会返回一个随机的$location_id;您可以使用$name = $locations[$location_id] 获取名称。
      • 当然,你是对的 - 我刚刚选择了这个,因为我最适合使用示例代码。是的,我对推动不正确感到很尴尬。我在 perl(w 哈希)中编写了大量代码,所以我应该知道得更好!谢谢!
      • 很好,你拯救了我的一天
      猜你喜欢
      • 1970-01-01
      • 2014-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-01
      相关资源
      最近更新 更多