【问题标题】:php - How to create a random bit streamphp - 如何创建随机比特流
【发布时间】:2016-07-22 07:00:51
【问题描述】:

如何生成以下随机数组:

array(1, 0 , 0, 1, 1, 1, 1, 0, 1, 0, 0)

length = n?

当然,for 解决方案始终存在。但是有没有任何单行简单的解决方案,比如array_fillmt_rand(0, 1)的任意组合?

【问题讨论】:

    标签: php arrays random


    【解决方案1】:

    您可以结合使用array_maprange(或array_fill,如果需要)来生成随机值。

    $length = 10;
    $randBits = array_map(
        function () {
            return mt_rand(0, 1);
        },
        range(0, $length - 1)
    );
    

    Working example

    【讨论】:

    • 感谢您的好回答。如您所述,它如何适用于array_fill
    • @Trix 在这种情况下,array_fill 几乎没有区别(将应用一些性能更改),因为您将使用随机生成的值覆盖它的值。
    【解决方案2】:

    在 mt_rand 中使用范围

          $random_bit_stream = array_map(function() {
                return mt_rand(0,1);
            }, range(1,6));
    
    or
    
     $random_bit_stream = array_map(function() {
                return rand(0,1);
            }, range(1,6));
    
            print_r($random_bit_stream);
    

    输出:

    Array ( [0] => 0 [1] => 1 [2] => 1 [3] => 1 [4] => 0 [5] => 0 ) 
    

    【讨论】:

      【解决方案3】:

      试试这个,

      function randome_array($n)
      {
          $array=array();
          $x = 1;
          while($x <= $n) {
          $temp = mt_rand(0,1);
              array_push($array,$temp);
              $x++;
          }
          return $array;
      }
      print_r(randome_array(5));
      

      https://3v4l.org/ZSrMX

      希望对你有所帮助。

      【讨论】:

        【解决方案4】:

        嗯,正如你提到的,你可以单行 for 解决方案。

        for ($i = 0; $i < count($arr); $i++) $arr[$i] = rand(0, 1);

        除此之外,既然你提到了array_fill,你也可以简单地将它与随机函数一起使用

        $arr = array_fill (0, count($arr), rand(0, 1));

        【讨论】:

        • array_fill (0, count($arr), rand(0, 1)); 只会使第一个值随机,而不是在所有值中重复它。
        • @Justinas 你是对的,这是一个愚蠢的建议。内联 for 循环可能是最快的解决方案,即使它不完全匹配作为答案。
        【解决方案5】:

        你可以试试 range()

        range — 创建一个包含一系列元素的数组

        更多信息请查看http://php.net/manual/en/function.range.php

        【讨论】:

        • 我不想要更多信息,我想要一个答案
        • 如何仅使用range 获得结果?请解释。谢谢
        • 自己动手。在直接回答之前你应该问过这个问题..!不能再用勺子喂你了……
        • 不,我没有。但它已被删除,我不知道为什么!请您解释一下range 是如何用于生成比特流的?
        猜你喜欢
        • 2011-06-28
        • 1970-01-01
        • 2020-09-17
        • 2010-10-25
        • 1970-01-01
        • 1970-01-01
        • 2015-04-17
        • 2020-10-26
        相关资源
        最近更新 更多