【问题标题】:Functions about random numbers关于随机数的函数
【发布时间】:2015-10-11 09:07:45
【问题描述】:

我如何创建回答以下问题的函数:

  1. 在模拟过程中生成了多少个不同的数字?
  2. 0 到 50 数字出现的百分比?
  3. 模拟过程中出现多次的数字是多少?
 function randomDigits($numDigits) {
        $arrayRange = 1000;
        if ($numDigits <= 0) {
            return '';
        } else{
            for($i=0; $i<$arrayRange; $i++){
                echo mt_rand(0, 50) ." ";
            }
        }

    }
    $maxq = 100;
    for ($i = 1; $i <= $maxq; $i++) {
        echo $i . "<br>\n";
        randomDigits($i) . "<br>\n----<br>\n";
    }

【问题讨论】:

    标签: php arrays random


    【解决方案1】:

    如果你将所有生成的数字存储到一个数组中,你可以使用array_count_values

    这将计算数组中多个键值的出现次数(例如,如果数字 7 出现了 12 次)并在数组中返回结果。这仅适用于字符串和整数值。

    <?php
    
        $array = array( 'a', 'a', 'a', 'a', 'b', 'b', 'c' );
        print_r(array_count_values($array));
    
    ?>
    

    以上结果:

    Array
    (
        [a] => 4
        [b] => 2
        [c] => 1
    )
    

    从那里,您应该能够轻松地执行您希望的所有方法和输出。
    这是与您现有代码的基本集成...

    $maxq = 100;
    $returned_array = array();
    
    for ($i = 1; $i <= $maxq; $i++)
    {
    
        $returned_array = randomDigits($i); // return the generated array 
    
        // merge 'add' the two arrays, like saying i = i +2 or
        // merged_array = merged_array + array
        array_merge($returned_array, $returned_array);
    
        // here you now have one array of 1000 random values
        // print_r($returned_array);
    
        // lets do some math
        print_r(array_count_values($returned_array));
        // this will show how many values were duplicates...
        // e.g
    
        // Array ( 
        // [43] => 25  the number 43 was generated 25 times
        // [25] => 22  the number 25 was generated 22 times
        // [1] => 28   ect...
    
        // you can loop through this array here and see which value was generated several times,
        // format the results nicely, and do all sorts of maths on it as you wish
    }
    
    
    function randomDigits($numDigits)
    {
    
        $arrayRange = 1000;
        $generated_array = array(); // here is an actual array that will store the generated numbers
    
        if ($numDigits <= 0) 
        {
    
            return null;
    
        } 
    
        else
        {
    
            for($i = 0; $i < $arrayRange; $i++)
            {
    
                $random = mt_rand(0, 50);
                array_push($generated_array, $random); // add the random value to the array
    
            }
    
            // here you have your array of generated numbers
            return $generated_array;
    
        }
    
    }
    

    【讨论】:

    • 如果你写的是$array = array ( 'a', 'a', ....),但在我的情况下输出生成100个数组,我怎么能只包含在一个数组中?你能帮我用我的代码编写示例吗?
    • @J.arc 查看编辑查看编辑,您实际上并没有生成数字数组,您只是生成数字而不是将其存储到数组中。我对其进行了更改,以便您生成数字并将其存储到数组中。然后,您需要将该生成的数组合并为一个包含所有值的大数组。现在有了那个位数组,你可以从那里得到任何你想要的东西。
    【解决方案2】:

    此处为示例 - http://codepad.org/9Dv1CwR7

    序列生成包含给定长度的随机整数

    function generate_array($count, $min, $max) {
        $arr = array();
        for ($i=0; $i<$count; $i++) {
            $arr[$i] = rand($min, $max);
        }
        return $arr;
    }
    

    计算给定区间的百分比(使用辅助函数):

    function cnt($element, $arr){
    
        $cnt = array_count_values($arr);
        return $cnt[$element];
    }
    
    function percentages($min, $max, $arr) {
    
        $total = sizeof($arr);
        $occurences = 0;
        while ($min < $max) {
            if (!array_key_exists($min, $arr)) {
                continue;
            } else { 
                $occurences = $occurences + cnt($min, $arr); 
            }
            $min++; 
        }
        return $occurences/$total;  
    }
    

    【讨论】:

    • 非常感谢,我如何填写查看 Adrian David Smith 的第一条评论 $generated_array 的百分比?你能帮我更多地使用相同的变量名吗? :)
    • 我会尽力去做的。让我重新解释一下我的步骤:生成一个给定长度、最大和最小数字的数组。 generate_array(10, 3, 8) 将创建一个包含 10 个元素的数组,这些元素是 3 到 8 之间的随机整数。如果将此函数的值分配给变量 $x,它将类似于“[3,4,5,5, 4,6,5,4,7, 6]”。那么如果你通过其中一个值来查看它在数组中出现的次数,cnt 会帮助你。例如cnt(6, $x) 将返回 2。如果您想计算 6,8 之间的数字百分比,请使用 percentage(6,8, $x),它将为 $x 数组返回 0.3。
    • 我实际上是先在 python 中编写代码,然后再转换为 php。我在理解其他 php 代码时遇到问题 :) 但让我尝试看看 Adrian Smith 的代码发生了什么 :)
    【解决方案3】:

    将所有模拟值添加到数组中,并使用 array_count_values 获取所有唯一值。

    function randomDigits($numDigits) {
            $arrayRange = 1000;
            if ($numDigits <= 0) {
                return '';
            } else{
              $arr=array();
                for($i=0; $i<$arrayRange; $i++){
                    $val=mt_rand(0, 50);
                    $arr[]=$val;
                    echo $val ." ";
                }
    
                echo "\n";
                $arr=array_count_values($arr);
                echo "Total Unique numbers:".count($arr);
            }
    
        }
        $maxq = 100;
        for ($i = 1; $i <= $maxq; $i++) {
            randomDigits($i) . "<br>\n----<br>\n";
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-08
      • 2021-11-06
      • 1970-01-01
      • 1970-01-01
      • 2015-02-10
      • 2021-04-26
      • 2017-09-24
      • 2012-01-20
      相关资源
      最近更新 更多