几种生成随机数方法
4

前言

本文摘自 PHP 经典实例

解决方案

在 $lower 和 $upper 之间生成随机数,包括 $lower 和 $upper

$lower = 65;
$upper = 95;
mt_rand( $lower,$upper )

在性能方面, mt_rand() 比 rand() 快大概四倍。

应用场景

如果想在页面上显示一个随机的图片,随机设定游戏的开始位置,从数据库选择一个随机的记录的时候,或者生成唯一的一个会话标识字符。
mt_rand() 如果不传入参数,默认生成 0 到最大随机数之间的一个数,最大的随机数由 mt_getrandmax() 返回。

生成偏随机数

生成随机数,但又希望希望生成的随机数有些偏向性,使某个范围内的数出现的频率高于其他的数。

    $numbers = [1,2,3,4,5,6];
    $total = 0;
    foreach($numbers as $k => $v){
        $total += $v;
        $dis[$k] = $total;
    }
    // $total = 21
    // $dis = [ 1 => 1, 2 => 3, 3 => 6, 4 => 10, 5 => 15, 6 => 21 ];
    $rand = mt_rand( 0,$total-1 );
    foreach($dis as $k => $v){
        if($rand > $v){
            echo $k;
        }
    }

上面的函数的 $numbers 数组中的前几个数字出现的频率远大于后面出现的频率。
这种随机选择可以用于广告的投放,将某个广告列表,列表中为广告和剩余投放次数的键值对。将数组排序后,会优先投放前面的广告,从而平衡广告投放,当然这当中的原理还复杂,不是简单的随机数就能解决的。

php

日积月累,争取写出原创文章。感谢阅读!

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!