为了更加方便快捷的对字符串进行有效处理,这里特意整理了一批字符串常用函数,将其集成到一个通用traits
在控制器使用时只需要引用这个trait类即可直接使用,不需要额外再去引用其他类文件, 编写这个类的初衷是希望在html模版文件当中可以直接从后端给出一个动态滚动效果的数字,然后干脆把其他常用字符串处理函数也囊括在一起,今后使用的时候就不需要单独再去查找对应的类包进行引用
这里对拼音、随机字符串、版本号和滚动数字进行了处理
<?php
namespace app\common\traits;
use fast\Pinyin;
use fast\Random;
use fast\Version;
trait strings
{
/**
* 字符串占位符
* @param String $str 初始化字符串
* @param array $var 变量数组
* @return string
*/
public function sprintf(String $str,Array $var) {
$str = vsprintf($str, $var);
return $str;
}
/**
* 生成拼音
* @param String $str 中文汉字
* @param bool $onlyfirst 是否只返回拼音首字母
* @param String $delimiter 分隔符
* @param bool $ucfirst 是否首字母大写
* @return string
*/
public function pinyin(String $str,bool $onlyfirst,String $delimiter="",bool $ucfirst) {
$pinyin = Pinyin::get($str, $onlyfirst, $delimiter, $ucfirst);
return $pinyin;
}
/**
* 生成数字和字母
* @param int $len
* @return string
*/
public function alnum(int $len=6) {
return Random::alnum($len);
}
/**
* 仅生成字符串
* @param int $len
* @return string
*/
public function alpha(int $len=6) {
return Random::alpha($len);
}
/**
* 生成指定长度的随机数字
* @param int $len
* @return string
*/
public function numeric(int $len =4) {
return Random::numeric($len);
}
/**
* 生成指定长度的无0的随机数字
* @param int $len
* @return string
*/
public function nozero(int $len=4) {
return Random::nozero($len);
}
public function random_float(int $st_num, int $end_num, int $mul=1000000) {
if($st_num > $end_num) return false;
return mt_rand($st_num * $mul, $end_num * $mul) / $mul;
}
/**
* 根据数组元素的概率获得键名
* @param array $ps
* @param int $num
* @param bool $unique
* @return mixed 当num为1时返回键名,反之返回一维数组
*/
public function lottery(Array $ps,int $num=1,bool $unique=true) {
return Random::lottery($ps, $num, $unique);
}
/**
* 获取全球唯一标识
* @return string
*/
public function uuid() {
return Random::uuid();
}
/**
* 检测版本是否的版本要求的数据中
*
* @param string $version
* @param array $data
* @return bool
*/
public function check(String $version,Array $data = []) {
return Version::check($version, $data);
}
/**
* 比较两个版本号
*
* @param string $v1
* @param string $v2
* @return boolean
*/
public function compare($v1, $v2){
return Version::compare($v1, $v2);
}
/**
* 动态滚动数字
* @param float $num
* @param $decimals
* @param bool $ThousandSep
* @param string $color
* @param string $size
* @return string
*/
public function animationframe(float $num,$decimals, bool $ThousandSep= true,int $sec=300, String $color = "#1d9b24",String $size="12px") {
$uuid = $this->alpha(1).$this->uuid();
$var = $this->alpha(6);
return <<<EOF
<style type="text/css">
#{$uuid} {
color: $color;
font-size: $size;
}
</style>
<script type="text/javascript">
var $var = $num;
var amountFrame = 0;
var frameNum = $sec;
var animation = window.requestAnimationFrame(function f() {
var text = parseFloat($("#{$uuid}").text(), $decimals);
if(amountFrame < $var) {
amountFrame = amountFrame + $var / frameNum;
animation = window.requestAnimationFrame(f);
}else{
amountFrame = $var;
window.cancelAnimationFrame(f);
}
$("#{$uuid}").text($ThousandSep ? amountFrame.toFixed($decimals).toLocaleString() : amountFrame.toFixed($decimals));
});
</script>
<span id='{$uuid}'></span>
EOF;
}
}