hi-folks / rando-php
PHP 随机生成库
Requires
- php: ^8.0|^8.1|^8.2|^8.3
Requires (Dev)
- phpstan/phpstan: ^1.9
- phpunit/phpunit: ^8.0|^9.3
- rector/rector: ^1
- squizlabs/php_codesniffer: ^3.7
README
RandoPHP 是一个用于随机事物的 PHP 开源包。使用此包,您可以
- 抽取:从数组中抽取随机项(样本)。当您想要“抽取”一些数字或项时很有用;
- 生成:用于创建随机项/序列
- 项 如整数、字节、布尔值、浮点数、经纬度坐标、字符(数值、字母、字母数字);
- 序列 如整数或字符数组;
通过流畅的接口,您可以控制一些事物,例如
- 要创建的最小和最大值;
- 要创建的项数;
- 对于序列,您是否希望有重复项([1,5,3,1,1],1 是重复的,或 [1,6,5,3,8],没有重复);
- 以及其他内容,请参阅文档了解更多选项。
目录
安装
您可以通过 composer 安装此包
composer require hi-folks/rando-php
使用方法
导入正确的类
use HiFolks\RandoPhp\Randomize;
生成字符
有时您想获得一个随机字符,例如,一个数值字符
Randomize::char()->numeric()->generate();
或者您可能需要一个字母字符
Randomize::char()->alpha()->generate();
您甚至可以同时做到这两点!
Randomize::char()->alphanumeric()->generate();
您可以生成小写字符
Randomize::char()->alpha()->lower()->generate();
您可以生成大写字符
Randomize::char()->alpha()->upper()->generate();
您可以生成特殊字符。特殊字符是 '!"#$%&'()*+,-./:;<=>?@[]^_`{|}~' 中的一个;
Randomize::char()->specialCharacters()->generate();
生成布尔值
有时您想获得一个随机的布尔值 true
或 false
(掷硬币)
$randomBool = Randomize::boolean()->generate();
生成浮点数
有时您想获得一个随机的浮点数(默认最小-最大范围为 0.0 - 1.0)。例如,您想生成一天的随机温度
$randomFloat = Randomize::float()->generate();
或者您可以将最小-最大范围设置为 0 - 90,这相当于 ->min(0)->max(90)
$randomFloat = Randomize::float()->min(0)->max(90)->generate();
生成整数
有时您想获得一个随机的整数(最小-最大范围)。例如,您想掷骰子
$randomNumber = Randomize::integer()->min(1)->max(6)->generate();
使用 range()
方法,而不是 min()
和 max()
,做同样的事情
$randomNumber = Randomize::integer()->range(1,6)->generate();
您可以使用快捷助手通过传递最小和最大参数调用构造函数来生成整数
$randomNumber = Randomize::integer(1,6)->generate();
生成字节
有时您想获得一些随机的字节(十六进制)。例如,您想生成一个随机的 RGB 颜色(十六进制格式中的十六进制三元组)
$randomRGB = Randomize::byte()->length(3)->generate();
生成日期
有时您想获得一个随机日期。例如,您想生成一个随机日期
$randomDate = Randomize::datetime()->generate();
默认情况下,日期范围是当前年的第一天到当前年的最后一天。如果您想定义范围,例如,从 2020 年 1 月 1 日到 2020 年 1 月 10 日的范围,您可以使用 min()
和 max()
方法
$randomDate = Randomize::datetime()->min('2020–01–01')->max('2020–01–10')->generate();
您甚至可以使用 format()
方法指定随机生成的日期的格式
$randomDate = Randomize::datetime()->format('d-M-Y')->generate();
您可以使用 min()
和 max()
与 format()
方法一起使用
$randomDate = Randomize::datetime()->min('2020–01–01')->max('2020–01–10')->format('d-M-Y')->generate();
在最新的示例中,您可以获得类似于 "05-Jan-2020" 的内容。
生成序列
有时,您想获得一些随机序列。例如,您想掷骰子 15 次
$randomRolls = Randomize::sequence()->min(1)->max(6)->count(15)->generate();
有时,您想获得一些随机的字符序列。例如,长度为 10 的字符序列
$randomChars = Randomize::sequence()->chars()->count(10)->generate();
或者你可能需要数字字符序列。
$randomChars = Randomize::sequence()->chars()->numeric()->count(10)->generate();
或者你可能需要字母字符序列。
$randomChars = Randomize::sequence()->chars()->alpha()->count(10)->generate();
是的,甚至两者都要。
$randomChars = Randomize::sequence()->chars()->alphanumeric()->count(10)->generate();
你想要20个小写字母
Randomize::sequence()->chars()->alphaLowerCase()->count(20)->asString()->generate();
你想要20个大写字母
Randomize::sequence()->chars()->alphaUpperCase()->count(20)->asString()->generate();
有时你可能想要获得一些没有重复的随机序列。例如,你想玩“Tombola”(从1到90中提取数字,没有重复)
$randomTombola = Randomize::sequence()->min(1)->max(90)->count(90)->noDuplicates()->generate();
有时你可能想要获得一些没有重复的随机字符序列。
$randomChars = Randomize::sequence()->chars()->count(10)->noDuplicates()->generate();
或者你可能想要没有重复的数字字符序列。例如,长度为10的字符序列
$randomChars = Randomize::sequence()->chars()->numeric()->count(10)->noDuplicates()->generate();
或者你可能想要没有重复的字母字符序列。
$randomChars = Randomize::sequence()->chars()->alpha()->count(10)->noDuplicates()->generate();
是的,甚至两者都要,并且没有重复。
$randomChars = Randomize::sequence()->chars()->alphanumeric()->count(10)->noDuplicates()->generate();
随机字符串
如果你想要生成一个随机字符串(字母数字,只有字母,只有数字,没有重复,小写,大写等),你可以使用随机字符生成。要生成字符串,请使用 Randomize::chars()
$string = Randomize::chars()->generate();
默认行为是
- 10个字符;
- 只有字母(a-z);
- 小写;
- 允许重复(字符串'aba'中'a'字符有重复)。
你可以通过一些方法和参数来更改默认值。设置字符类型(数字,字母,字母数字...)的方法
- alpha() : 'a-z', 'A-Z';
- alphanumeric() : 'a-z', 'A-Z', '0-9';
- numeric() : '0-9';
- alphaLowerCase() : 'a-z';
- alphaUpperCase() : 'A-Z';
- specialCharacters() : !"#$%&'()*+,-./:;<=>?@[]^_`{|}~
你还有一些方法来“控制”输出,例如,避免重复
unique()
: 它生成一个字符串,每个字符最多出现一次。
只包含数字字符('0'-'9')的字符串
如果你想要生成一个由数字字符('0'-'9')构成的16个字符的字符串
$string = Randomize::chars(16)->numeric()->generate();
你可能得到这样的结果 '3963233500573002'。
20个字符的字符串,小写,只包含字母,没有重复
如果你想要获得一个20个字符的字符串,小写,只包含字母('a'-'z'),并且你想要避免字符重复(使用 alphaLowerCase()
和 unique()
)
$string = Randomize::chars(20)->alphaLowerCase()->unique()->generate();
你可能得到这样的结果:'nmbsjhrgdyfxwoltqkzp'。
20个字符的字符串,包含字母和特殊字符
如果你想要获得一个包含字母和特殊字符的20个字符的字符串
$string = Randomize::chars(20)->specialCharacters()->alpha()->generate();
你可能得到这样的结果:'IOgPckeGGifrD%DRy[*!'。
随机抽取内容
如果你有一组值,并且想要提取/选择/抽取一个或多个元素,你可以使用 Draw
类而不是 Randomize
。要使用 Draw
类,你需要导入它
use HiFolks\RandoPhp\Draw;
建议你在下一个项目中使用的编程语言(随机)
use HiFolks\RandoPhp\Draw; $randomLanguage = Draw::sample(["PHP", "Python", "Golang", "Javascript"])->snap(); var_dump($randomLanguage);
建议你在下一个项目中使用的JS框架(随机)
$array=["React.js", "Vue.js", "Svelte.js", "Angular.js" , "Alpine.js", "Vanilla js"]; $randomJs = Draw::sample($array)->extract();
提取3个你可以用于下一个项目的JS框架
$array=["React.js", "Vue.js", "Svelte.js", "Angular.js" , "Alpine.js", "Vanilla js"]; $randomJs = Draw::sample($array)->count(3)->extract();
提取3个JS框架(允许重复)
$array = ["React.js", "Vue.js", "Svelte.js", "Angular.js", "Alpine.js", "Vanilla js"]; $randomJs = Draw::sample($array)->count(3)->allowDuplicates()->extract();
测试
composer test
如果你想查看一些覆盖率报告,你可以使用带有 coverage-text
选项的 phpunit
命令
vendor/bin/phpunit --coverage-text
警告 ⚠️
在底层,RandoPHP 使用了一些本地的PHP函数,如
- array_rand(): PHP Doc for array_rand;
- random_int(): PHP Doc for random_int;
- shuffle(): PHP Doc for shuffle;
- random_bytes(): PHP Doc for random_bytes.
这些PHP函数使用的是不适用于加密目的的伪随机数生成器。
更新日志
请参阅更新日志以获取有关最近更改的更多信息。
贡献
请参阅CONTRIBUTING以获取详细信息。
提交想法或功能请求或问题
查看您的请求是否已经创建https://github.com/Hi-Folks/rando-php/issues。如果不存在,您可以创建一个新的https://github.com/Hi-Folks/rando-php/issues/new
致谢
许可证
MIT 许可证(MIT)。有关更多信息,请参阅许可证文件。