ierusalim/php-random-gen

随机数组、字符串、json文件生成

1.1.1 2019-05-27 05:07 UTC

This package is auto-updated.

Last update: 2024-09-27 18:04:27 UTC


README

Build Status codecov Scrutinizer Code Quality SensioLabsInsight

随机数据库

该库易于快速启动。它适用于从给定的字符集中生成随机字节或字符串。还可以生成任意嵌套深度的数组以及具有大型数据结构的文件

安装

通过Composer

$ composer require ierusalim/php-random-gen

使用方法

生成随机字符串

这个简单的函数放在RandomStr.php文件中,没有依赖关系

  • genRandomStr($len)
  • genRandomBytes($bytes_cnt)
  • setChars(结果将生成的值的列表)

以下示例很容易理解

<?php

$g = new RandomStr();

// Generate random 16 characters from default list
$str = $g->genRandomStr(16);
echo $str;

// Generate 33 random bytes
$bytes = $g->genRandomBytes(33);

// It works fast. No problem for create random string of million chars
$str = $g->genRandomStr(1000000);
echo "\nGenerated bytes: " . strlen($str);

// Need generate multibyte characters? No problems, set flag $utf8mode = true
$g->setChars("神會貓性少女 迪克和陰部", true);
$str = $g->genRandomStr(888);

// Generate string of 100 chars from character list "abcdefgh"
$g->setChars("abcdefgh");
$str = $g->genRandomStr(100);
echo $str;

// Generate string of 10 random words from specified words array
$words_arr = explode(',',' one, two, three, four, five, six, seven');
$g->setChars([$words_arr]);
echo $g->genRandomStr(10); 
// We get a result like " five three three three four seven four four six four"

生成随机数组

随机数组生成类RandomArray是RandomStr的扩展。

简单示例

<?php

$g = new RandomArray();

// Generate small random array with default parameters:
$arr = $g->genRandomArray();
print_r($arr);

// Generate random array with string keys from listed chars, 3-9 chars length
$g->setKeysModel(3, 9, 'abcdefghijklmnopqrstuvwxyz');
$g->setValuesModel(0, 100); //random numeric values range from 0 to 100
$arr = $g->genRandomArray(10, 15, 0); //generate 10-15 elements (not nested)
print_r($arr);

由于随机数组是在内存中生成的,所以如果使用非简单模型并且元素数量很大(10万或更多),可能会很慢。

但是,当使用简单的数字键(1,2,3...n)和简单的值范围0-65535时,生成包含1百万元素(嵌套深度2-3级)的数组的时间小于1秒。

查看示例

<?php

$g = new RandomArray();
$g->setKeysModel();     //set simple keys model (1,2,3,...n)
$g->setValuesModel();   //set simple values model (integer range 0-65535)
$lim_elements = 1000000;
$lim_depth = 3;
$_ts = microtime(true);
$arr = $g->genRandomArray(10000, 10000, 32768, $lim_depth, $lim_elements);
$total_generated = $lim_elements - $g->lim_elements;
echo (microtime(true) - $_ts) . " sec, generated: $total_generated elements.\n";

什么是生成模型?

生成随机键和值可以使用4种模型

  • 0 简单模型 - 是最快的,键为1,2,3..n,值为0-65535。
  • 1 数字范围模型 - 使用mt_rand(min,max)为随机键或值。
  • 2 随机字符串模型 - 使用genRandomStr函数生成键或值。
  • 3 用户函数 - 使用用户定义的函数生成键或值。

这些模型如下设置

  • 0 简单模型
$g->setKeysModel();   //set simple keys model (1,2,3,...n)
$g->setValuesModel(); //set simple values model (integer range 0-65535)
  • 1 数字范围模型
$g->setKeysModel(min, max); //set keys model range from min to max (integer)
$g->setValuesModel(min, max); //set values model range from min to max (integer)
  • 2 随机字符串模型 (请参阅genRandomStr函数的说明)
$g->setKeysModel(min_len, max_len, $char_str [, $utf8flag] )
$g->setValuesModel(min_len, max_len, $char_str [, $utf8flag] )
  • 4 用户函数模型
$g->setKeysModelFn(callable);
$g->setValuesModelFn(callable);

使用可调用生成模型的简单示例

<?php

$g = new RandomArray();

// Keys are md5 of serial key numbers
$g->setKeysModelFn(function($parr) {
            \extract($parr); //$k, $v, $lim_depth
            return \md5($k);
        });
// Values - arrays with all parameters given for generation function
$g->setValuesModelFn(function($parr) { return $parr; });

$arr = $g->genRandomArray();

print_r($arr);