【问题标题】:Generating random numbers in order按顺序生成随机数
【发布时间】:2012-07-10 02:53:57
【问题描述】:

有没有办法从数字列表中获取随机数,然后将它们按顺序排列?

例如,如果我想要 1 到 12 之间的 4 个数字,如何按升序获得这些数字?

编辑:我需要数字是唯一的。

【问题讨论】:

    标签: php arrays sorting random


    【解决方案1】:
    $output = array();
    for($i=1;$i<=4;$i++){
       $output[] = mt_rand(1, 12);
    }
    sort($output);
    

    【讨论】:

      【解决方案2】:

      将随机值存储在数组中,然后使用 PHP 的排序函数:http://php.net/manual/en/function.sort.php

      $numbers = range(1, 12); 
      shuffle($numbers); 
      $numbers=array_slice($numbers, 0, 4); 
      sort($numbers);
      

      【讨论】:

      • 在一张桌子上?!当您可以简单地将值存储在一个数组中时,为什么这么矫枉过正?
      • 哎呀大错字。我的回答有点太快了哈哈。已编辑
      • 没问题。除此之外,很好的答案。 :) 内容丰富,但不只是给“提问者”。
      • 谢谢你,不幸的是它没有检查我应该在原始问题中输入的重复值:(
      • 谢谢你;您的第一个答案为我指明了正确的方向,所以我想出了这个 $numbers = range(1, 12);洗牌($数字); $numbers=array_slice($numbers, 0, 4);排序($numbers);
      【解决方案3】:
      <?
      $y=array();
      for($i=0;$i<4;$i++){$y[$i]=mt_rand(1,12);}
      sort($y);
      ?>
      

      【讨论】:

        【解决方案4】:

        试试这个,添加到数组,然后排序。

        foreachrange 会更容易阅读,也更容易维护:)

        <?php
        $b1 = 1;
        $b2 = 12;
        
        $nums = array();
        foreach(range(1,4) as $i){
           $nums[] = rand($b1,$b2);
        }
        sort($nums);
        var_dump($nums);
        

        有关排序的更多信息 http://php.net/manual/en/function.sort.php

        【讨论】:

        • foreach(range(1,4) --- 为什么不for?为此生成一个数组是一种矫枉过正的做法。 PS:不,它不容易阅读,也绝对不容易维护
        • forloop 也可以,但我想这只是我们发现这种方法更易于阅读的偏好。
        • 我不认为它矫枉过正,除非你在一些非常大的循环中使用它,数学运算。
        • “我们发现这种方法更容易阅读”——这很奇怪。因为每一种命令式编程语言都有 for 并且每个人都知道如何使用它,而 foreach + range 是非常不直观的解决方案
        • 如果您仍然想使用它 - 为什么不生成 $nums 并遍历它呢?在这种情况下,我们至少不会创建无用的数组
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-19
        • 2012-12-19
        • 2013-10-21
        • 2017-08-16
        • 2015-10-17
        • 1970-01-01
        • 2012-11-19
        相关资源
        最近更新 更多