在内部,str_shuffle()使用rand(),它不会产生高质量的随机数,正如你在

this answer中看到的那样;如果您想要更好的分发,您可能希望自己实施Fisher-Yates并选择您选择的随机来源,例如

mt_rand():

function my_str_shuffle($str)

{

if ($str == '') {

return $str;

}

$n_left = strlen($str);

while (--$n_left) {

$rnd_idx = mt_rand(0, $n_left);

if ($rnd_idx != $n_left) {

$tmp = $str[$n_left];

$str[$n_left] = $str[$rnd_idx];

$str[$rnd_idx] = $tmp;

}

}

return $str;

}

关于找到合适的0/1随机数,也参见my earlier answer.

更新

assert($n_left <= 255);

$random = openssl_random_pseudo_bytes($n_left);

while (--$n_left) {

$rnd_index = round($random[$n_left] / 255 * $n_left);

// ...

}

php生成卡片,php洗牌一包卡片相关推荐

  1. VB通过洗牌算法生成随机数ID

    Visual Basis开发语言通过洗牌算法生成UUID. 1.在Visual Studio中创建一个桌面应用程序用于代码的测试,点击"洗牌算法"按钮式触发算法运算,并将运算结果回 ...

  2. 编程模拟实现斗地主的生成牌、发牌和洗牌操作

    编程模拟斗地主的生成牌.发牌和洗牌的操作 一.使用到的方法: toString 将对象返回为字符串的形式 hashCode 用来比较两个对象的内容是否相等 equals 用来比较两个对象是否相等 常量 ...

  3. 用java制作扑克牌_Java模拟扑克牌洗牌实现生成52张扑克的方法示例

    本文实例讲述了Java模拟扑克牌洗牌实现生成52张扑克的方法.分享给大家供大家参考,具体如下: 要求: 生成52张扑克,模拟扑克牌洗牌,并输出. 实现代码: package com.NCU.ZHANG ...

  4. 洗牌一副n张牌,每一张牌都用字母顺序标记。

    题面 你的任务是洗牌一副n张牌,每一张牌都用字母顺序标记. 单个洗牌动作从牌组底部取出h张牌,并将其移动到牌组顶部. 卡片组由一个字符串表示,如下所示. abcdeefab 第一个字符和最后一个字符分 ...

  5. 应该知道关于Python的随机模型 以及使用范围例子洗牌 特别长 1米

    随机数是一个过程,它从一个序列的任意选择的结果.这是所谓的随机数生成.用python随机模块,我们可以产生随机数,实现不同的编程需求.它有一个不喜欢的功能randint(),(),choice(),* ...

  6. 面试官:会玩牌吧?给我讲讲洗牌算法和它的应用场景吧!

    有一次参加面试,面试官问我:"会玩牌吧?" 内心:"咋滴,这是要玩德州扑克(或者炸金花),赢了他就能通过面试么?" 结果-- 没想到面试官的下一句话:" ...

  7. 1.17 项目实例:模仿斗地主洗牌发牌小游戏

    实现思路步骤如下: 准备牌:Arrylist 集合储存,for 循环遍历实现 洗牌:使用 Collections 的shuffle(arryBox);方法刷新集合中的顺序 发牌:使用 for 循环遍历 ...

  8. c++随机打乱数组_【洗牌算法】你确定这样的抽奖算法是随机的?

    洗牌算法在实际应用中使用的比较广泛,比如抽奖.三国杀游戏等等.由于要完全理解洗牌算法存在一定的难度,所以洗牌算法也经常被拿来做算法笔试题.例如以下两个常见的笔试题:在n个不同的数中随机取出不重复的m个 ...

  9. 这或许是讲解Knuth(Shuffle)洗牌算法最好的文章

    1. 前言 看问题,洗牌,显然是一个随机算法了.随机算法还不简单?随机呗.把所有牌放到一个数组中,每次取两张牌交换位置,随机 k 次即可. 如果你的答案是这样,通常面试官会进一步问一下,k 应该取多少 ...

最新文章

  1. 区块链论文:OmniLedger,一种区块链分片技术
  2. linux下安装PHP的redis扩展
  3. 最小二乘法多项式拟合的Java实现--转
  4. Java集合:Hashtable源码分析
  5. matlab fill 渐变,Matlab的渐变色填充(一)
  6. Uncaught TypeError: Object [object Object] has no method 'xxx'
  7. linux deepin sudo: add-apt-repository:找不到命令 解决办法
  8. 如何将javaweb项目部署到linux下
  9. commons-pool2-2.3 jar包_[漏洞复现]FastJson 1.2.61远程代码执行漏洞(From第三方jar包)
  10. VisualBrush
  11. 注册app短信验证平台_怎样挑选网站验证码短信平台?
  12. python读取指定路径txt文件-python读取txt文件并取其某一列数据的示例
  13. 玩转大数据系列之二:数据分析与处理
  14. 2017年网站建设公司现状分析
  15. mysql定时任务多条sql_【SQL】使用Navicat创建MySQL定时任务重复执行某个sql语句
  16. linux界面右键无效,在linuxtkin中运行GUI时,右键单击菜单消失得太快
  17. UI线程安全 runOnUiThread 和 Handler 一般用法
  18. 一个简单的form表单登录界面
  19. 江苏大学linux实验报告,正弦波振荡电路实验报告.doc
  20. Pandas的时间序列Period,period_range---详解(29)

热门文章

  1. 书籍推荐总结 C/C++/Java/Python/Linux/算法
  2. IDEA配置注释模板。
  3. imi在虎扑上亿数据迁移实践
  4. js json遍历到html,js遍历json的key和value的实例_稚终_前端开发者
  5. 虚拟机打开后黑屏且无法关闭
  6. 网页快慢与服务器空间,网站空间的要点
  7. php 获取去年今日,描写去年今日句子 去年的今天怎么表达
  8. router.beforEach
  9. 龙腾传世变态服务器网站,龙腾传世 变态版
  10. dw点击导航栏跳转到另一个html文件夹,DW常见问题使用技巧