【问题标题】:Select 2 random elements from associative array从关联数组中选择 2 个随机元素
【发布时间】:2012-06-02 23:07:00
【问题描述】:

所以我有一个关联数组,我想从中返回 2 个随机值。 此代码仅返回 1 个数组值,即随机 4 个数字中的任何一个。

$array = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4);
$key = array_rand($array); //array_rand($array,2); Putting 2 returns Illegal offset type
$value = $array[$key];
print_r($value); //prints a single random value (ex. 3)

如何仅从数组值中返回 2 个逗号分隔值? 3,4 之类的?

【问题讨论】:

标签: php arrays random


【解决方案1】:

array_rand 带有一个额外的可选参数,它指定您希望从数组中取出多少个随机条目。

$input_array = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4);
$rand_keys = array_rand($input_array, 2);
echo $input_array[$rand_keys[0]] . ',' . $input_array[$rand_keys[1]];

查看 PHP 文档以了解 array_rand here

【讨论】:

  • 1.您在第 3 行末尾有一个额外的括号和 2。这只会选择 2 个随机键,而不是原始数组中的值。
  • @Jeshurun 感谢您的帮助:) 但 nickb 首先正确发布,两个都很好的答案!
【解决方案2】:

array_keys()从数组中获取键,用shuffle()对键进行混洗,并打印出混洗后的键数组中前两个键对应的值,如下所示:

$array = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4);
$keys = array_keys( $array);
shuffle( $keys);
echo $array[ $keys[0] ] . ',' . $array[ $keys[1] ];

Demo

或者,您可以使用array_rand() 的第二个参数来获取两个键,如下所示:

$array = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4);
$keys = array_rand( $array, 2);
echo $array[ $keys[0] ] . ',' . $array[ $keys[1] ];

Demo

【讨论】:

  • 选择这个,因为它是最快的并且工作完美!
  • @Wonka - 很高兴我能帮上忙 :)
【解决方案3】:

有一种更有效的方法可以保留键和值。

function shuffle_assoc(&$array) {
        $keys = array_keys($array);

        shuffle($keys);

        foreach($keys as $key) {
            $new[$key] = $array[$key];
        }

        $array = $new;

        return true;
    }

查看文档here

【讨论】:

    【解决方案4】:
    $a=rand(0,sizeof($array));
    $b=$a;
    while ($a==$b) $b=rand(0,sizeof($array));
    
    $ar=array_values($array);
    $element1=$ar[$a];
    $element2=$ar[$b];
    

    如果数组很大,应该比shuffle() 和朋友更有效。

    【讨论】:

    • array_rand 应该是高效的。
    • 应该是——我只是手头没有!
    猜你喜欢
    • 2011-11-04
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-01
    相关资源
    最近更新 更多