【问题标题】:php get two different random array elementsphp获取两个不同的随机数组元素
【发布时间】:2011-01-20 14:28:24
【问题描述】:

从一个数组

 $my_array = array('a','b','c','d','e');

我想得到两个不同的随机元素。

使用以下代码:

 for ($i=0; $i<2; $i++) {
    $random = array_rand($my_array);  # one random array element number
    $get_it = $my_array[$random];    # get the letter from the array
    echo $get_it;
 }

有可能获得两次相同的字母。我需要防止这种情况。我想总是得到两个不同的数组元素。有人可以告诉我该怎么做吗? 谢谢

【问题讨论】:

    标签: php arrays random


    【解决方案1】:

    array_rand() 可以接受两个参数,数组和要选择的(不同)元素的数量。

    混合的array_rand (array $input [, int $num_req = 1])
    $my_array = array('a','b','c','d','e');
    foreach( array_rand($my_array, 2) as $key ) {
      echo $my_array[$key];
    }
    

    【讨论】:

    • 我喜欢这个。但是,根据 php.net 上的 cmets,返回索引的顺序并不是那么随机。无论如何+1 ;)
    • @middus:对于最新版本的 php,这仍然适用吗?有一些关于一些随机函数的抱怨,尤其是。在win32上。我认为它们已经(某种程度上)修复了。
    • 我其实不知道。我自己没有测试过。
    【解决方案2】:

    这个呢?

    $random = $my_array; // make a copy of the array
    shuffle($random); // randomize the order
    echo array_pop($random); // take the last element and remove it
    echo array_pop($random); // s.a.
    

    【讨论】:

    • 对于非常大的数组,这可能会很慢,尽管您当然不必为了获得两个元素而对整个数组进行洗牌。
    • 这不是规范的一部分;)。
    【解决方案3】:

    你总是可以删除你第一次选择的元素,然后你就不会再选择它了。如果您不想修改数组,请创建一个副本。

     for ($i=0; $i<2; $i++) {
        $random = array_rand($my_array);  # one random array element number
        $get_it = $my_array[$random];    # get the letter from the array
        echo $get_it;
    
        unset($my_array[$random]);
     }
    

    【讨论】:

    • 为什么要使用循环?为什么不只获取第一个随机值,将其从数组中删除然后获取第二个?您不需要删除第二个。
    • 我使用了循环,因为它意味着对 creativz 的代码的改动很小。此外,它还可以轻松扩展代码以选择任意数量的元素
    【解决方案4】:
    foreach (array_intersect_key($arr, array_flip(array_rand($arr, 2))) as $k => $v) {
        echo "$k:$v\n";
    }
    
    //or
    
    list($a, $b) = array_values(array_intersect_key($arr, array_flip(array_rand($arr, 2))));
    

    【讨论】:

      【解决方案5】:

      您可以随机播放,然后选择两片。如果要保持原始数组不变,请使用另一个变量。

      $your_array=[1,2,3,4,5,6,7];
      shuffle($your_array); // randomize the order
      $your_array = array_slice($your_array, 0, 2); //pick 2
      

      【讨论】:

        【解决方案6】:

        这是我用来从数组中提取多个随机元素的简单函数。

        function get_random_elements( $array, $limit=0 ){
        
            shuffle($array);
        
            if ( $limit > 0 ) {
                $array = array_splice($array, 0, $limit);
            }
        
            return $array;
        }
        

        【讨论】:

          【解决方案7】:

          这就是我的做法。希望这可以帮助任何困惑的人。

          $originalArray = array( 'first', 'second', 'third', 'fourth' );
          $newArray= $originalArray;
          shuffle( $newArray);
          for ($i=0; $i<2; $i++) {
            echo $newArray[$i];
          }
          

          【讨论】:

            【解决方案8】:

            获取第一个随机数,然后使用 do..while 循环获取第二个:

            $random1 = array_rand($my_array);
            do {
                $random2 = array_rand($my_array);
            } while($random1 == $random2);
            

            这将一直循环,直到 random2 与 random1 不同

            【讨论】:

            • @pheelicks 它应该可以工作,因为 array_rand 返回一个索引而不是元素本身。
            • 这不是最优雅的解决方案(我的钱花在 middus 上),但它确实有效。否决投票者的任何 cmets/原因?
            猜你喜欢
            • 1970-01-01
            • 2014-02-18
            • 2023-04-06
            • 2018-05-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多