panxu / phpfunc
Common Tools And Functions
This package's canonical repository appears to be gone and the package has been frozen as a result. Email us for help if needed.
v0.1.8
2024-03-20 08:39 UTC
Requires
- php: >=7.3.3
README
一个简洁小巧且功能完善的PHP常用工具集。
安装教程
# 安装最新版本
composer require panxu/phpfunc
# 安装指定版本
composer require panxu/phpfunc:0.1.1
# 更新当前版本
composer update panxu/phpfunc
# 卸载
composer remove panxu/phpfunc
常用函数
类名 | 处理类型 | 功能说明 |
---|---|---|
Str | 字符串 | 提供常用字符串快捷方法 |
Arr | 数组 | 提供常用数组快捷方法 |
字符串函数说明
use func\Str;
字符串截取(msubstr)
// 支持中文和其他编码
msubstr($str, $start = 0, $length = 15, $charset = "utf-8", $suffix = true)
Str::msubstr("phpfunc是一个简洁小巧且功能完善的PHP常用工具集",0,7); // phpfunc
返回指定范围随机字符串(randomString)
//
randomString($length = 6, $isupper = true, $islower = false, $isspec = false)
Str::randomString(10); // iffpndyh2t
返回全局唯一UUID(uuid)
uuid(bool $isConnector = true, bool $isMark = true, bool $islower = false)
Str::uuid();// {b86cc5ed-0736-4d7a-b5f6-e0aa52d3a5df}
中文转拼音(pinyin)
// utf8版,gbk转utf8也可用
pinyin($str, $ret_format = 'all', $placeholder = '_', $allow_chars = '/[a-zA-Z\d ]/')
Str::pinyin("我是中国人"); // wo shi zhong guo ren
返回指定范围内的随机姓名(randomName)
randomName($sex = 0, $issurname = null, $iscompound = true)
Str::randomName();
// Array
// (
// [surname] => 聂
// [name] => 辰
// [username] => 聂辰
// )
返回随机邮箱(randomEmail)
// 支持邮箱类型[126,163,139,189,qq,wo,sina,sohu,aliyun,foxmail,outlook]
randomEmail($type = "", $len = 6)
Str::randomEmail("sohu"); // 4wxbno@sohu.com
返回指定范围内的随机时间(randomDate)
randomDate($begin = "", $end = "", $now = true)
Str::randomDate(); // 2023-01-10 11:57:23
返回随机手机号码(randomPhone)
// 默认随机;0,移动;1,联通;2,电信
randomPhone($operator = null)
Str::randomPhone(); // 18952373556
返回随机shenfenzheng号(randomCardId)
randomCardId()
Str::randomCardId(); // 340421200511098459(可验证)
返回随机金额或小数(randomFloat)
randomFloat($num = 2, $min = 0, $max = 10)
Str::randomFloat(); // 9.18
返回随机省份或列表(randomProvince)
// 中国共计34个省级行政区,包括23个省、5个自治区、4个直辖市、2个特别行政区
randomProvince(bool $isIndex = false, bool $isAll = false)
Str::randomProvince();
// Array
// (
// [index] => 14
// [province] => 山东省
// )
字符串转数组(stringToArray)
// 支持中文英文混合字符串
stringToArray(string $string, string $charset = "utf-8")
Str::stringToArray("张a三");
// Array
// (
// [0] => 张
// [1] => a
// [2] => 三
// )
数据脱敏(dataMasking)(更新中)
// 支持指定类型及自定义规则脱敏
// 类型($type) [1姓名,2出生日期,3手机号,4shenfenzheng,5yinhangka号,6电子邮箱]
dataMasking(string $string = "", int $type = 0, array $index = [], string $replace = "*")
Str::dataMasking(Str::randomName()['username'], 1);//司马**
Str::dataMasking("1990/10/11", 2);//19**/**/**
Str::dataMasking(self::randomPhone(), 3);//181****9191
Str::dataMasking(self::randomCardId(), 4);//51152720******2457
Str::dataMasking("6225365271562822", 5);//622536********22
Str::dataMasking(Str::randomEmail(), 6); //******@qq.com
// 自定义规则
Str::dataMasking("内蒙古锡林郭勒盟二连浩特市", 0, [4, 5, 6, 7, 8]); //内蒙古锡*****连浩特市
金额转换为中文大写金额(amountConvert)
amountConvert(float $amount = 0.00, bool $isround = true, int $type = 0)
Str::amountConvert(10000000.34, false);//壹仟万元叁角肆分
返回随机颜色(randomColor)
// columns 0英文名|1中文名|2十六进制|3RGB
randomColor(int $num = 2, array $columns = [2])
Str::randomColor();
// Array
// (
// [0] => Array
// (
// [0] => #7B68EE
// )
// [1] => Array
// (
// [0] => #808080
// )
// )
生成唯一订单号(orderNumber)
// 全局唯一(原理uuid)
orderNumber(string $prefix = "", bool $letter = false, int $len = 19): string
Str::orderNumber(); //1741525064319552540
Str::orderNumber("C"); //C385012325448904557
Str::orderNumber("",true); //d8bc4aad9ddd3bd2690
字符串加密(encrypt)
// 用户密码加密md5可以替换为该方法
encrypt(string $password, string|int|null $algo = PASSWORD_BCRYPT, array $options = ["cost" => 12]): string
Str::encrypt("zhangsan"); //$2y$12$yt9zq7k8HkU7PxcXOJH.fez3DDyrHmJL5igwgbWAbTobJGk0czWKS
字符串校验(dencrypt)
dencrypt(string $password, string $hash): bool
Str::dencrypt("zhangsan", '$2y$12$yt9zq7k8HkU7PxcXOJH.fez3DDyrHmJL5igwgbWAbTobJGk0czWKS'); //true
按符号截取字符串的指定部分(sliceStrSpecifySign)
sliceStrSpecifySign(string $str, string $sign, int $number): string
Str::sliceStrSpecifySign("123/456/789/236", "/", 3); //236
截取指定两个字符之间字符串(sliceStrSpecifySign)
sliceBetween(string $str, string $begin, string $end): string
Str::sliceBetween("whttps://panxu.netvw123v", "w", "v"); //https://panxu.net
英文字母表(englishAlphabets)
englishAlphabets(bool $lowercase = false): array
Str::englishAlphabets(); //['A','B',...,'Z']
Str::englishAlphabets(true); //['a','b',...,'z']
解析html页面(loadHtml)
loadHtml(string $html, string $xpaht): object
Str::loadHtml((string)$html, "//div[contains(@class,'newscontent')]");
// DOMNodeList Object
// (
// [length] => 1
// )
Discuz经典加密解密函数(encryption)
// 注意该函数加密后的字符串可能存在url编码的问题,为了报错加密解密不出错可以按照如下操作:
// 加密前使用 rawurlencode编码
// 解密前使用 rawurldecode解码
encryption(string $string = "", string $operation = 'DECODE', string $key = '', int $expiry = 0): string
// 加密
Str::encryption("123", "ENCODE");
// b2c0jCtdjLWCz3QoHav73nXNhDVKAY1dOetmYr9gdN8
// 解密
Str::encryption("123", "DECODE");
// 123
数组函数说明
use func\Arr;
比较数组是否相等(equal)
// 比较数组是否相等
equal(array $arr1, array $arr2)
// 使用案例:
Arr::equal([['id' => 1, 'name' => "广东省", 'pid' => 0]],[['id' => 1, 'name' => "广东省", 'pid' => 1]])
// false
返回所有下级节点(tree)
tree($list = [], $keyName = "pid")
Arr::tree([
['id' => 1, 'name' => "广东省", 'pid' => 0],
['id' => 2, 'name' => "深圳市", 'pid' => 1],
['id' => 3, 'name' => "龙华区", 'pid' => 2],
['id' => 4, 'name' => "民治街道", 'pid' => 3],
]);
// Array
// (
// [0] => Array
// (
// [id] => 1
// [name] => 广东省
// [pid] => 0
// [children] => Array
// (
// [0] => Array
// (
// [id] => 2
// [name] => 深圳市
// [pid] => 1
// [children] => Array
// (
// [0] => Array
// (
// [id] => 3
// [name] => 龙华区
// [pid] => 2
// [children] => Array
// (
// [0] => Array
// (
// [id] => 4
// [name] => 民治街道
// [pid] => 3
// )
// )
// )
// )
// )
// )
// )
// )
返回所有节点等级(classify)
classify(array $data, int $id = 0, int $level = 0, string $keyName = "pid")
Arr::classify([
['id' => 1, 'name' => "广东省", 'pid' => 0],
['id' => 2, 'name' => "深圳市", 'pid' => 1],
['id' => 3, 'name' => "龙华区", 'pid' => 2],
['id' => 4, 'name' => "民治街道", 'pid' => 3],
]);
// Array
// (
// [0] => Array
// (
// [id] => 1
// [name] => 广东省
// [pid] => 0
// [level] => 1
// )
// [1] => Array
// (
// [id] => 2
// [name] => 深圳市
// [pid] => 1
// [level] => 2
// )
// [2] => Array
// (
// [id] => 3
// [name] => 龙华区
// [pid] => 2
// [level] => 3
// )
// )
获取指定节点的所有父节点(familyTree)
familyTree(array $data, int $nodeId, string $keyName = "pid")
Arr::familyTree([
['id' => 1, 'name' => "广东省", 'pid' => 0],
['id' => 2, 'name' => "深圳市", 'pid' => 1],
['id' => 3, 'name' => "龙华区", 'pid' => 2],
['id' => 4, 'name' => "民治街道", 'pid' => 3],
]);
// Array
// (
// [0] => Array
// (
// [id] => 1
// [name] => 广东省
// [pid] => 0
// )
// [1] => Array
// (
// [id] => 2
// [name] => 深圳市
// [pid] => 1
// )
// [2] => Array
// (
// [id] => 3
// [name] => 龙华区
// [pid] => 2
// )
// [3] => Array
// (
// [id] => 4
// [name] => 民治街道
// [pid] => 3
// )
// )
获取最次级节点(subordinate)
subordinate(array $data = [], string $keyName = "pid")
Arr::subordinate([
['id' => 1, 'name' => "广东省", 'pid' => 0],
['id' => 2, 'name' => "深圳市", 'pid' => 1],
['id' => 3, 'name' => "龙华区", 'pid' => 2],
['id' => 7, 'name' => "湖南省", 'pid' => 0],
['id' => 8, 'name' => "长沙市", 'pid' => 7],
['id' => 9, 'name' => "望城区", 'pid' => 8],
]);
// Array
// (
// [0] => Array
// (
// [id] => 3
// [name] => 龙华区
// [pid] => 2
// )
// [1] => Array
// (
// [id] => 9
// [name] => 望城区
// [pid] => 8
// )
// )
多维数组转一维(changeToSingle)
changeToSingle(array $data = [], string $keyName = "pid")
Arr::changeToSingle([[1, 2, 3], [4, 5, 6], [7, 8, 9 => ['a', 'b' => ['c', 'd']]]]);
// Array
// (
// [0] => 1
// [1] => 2
// [2] => 3
// [3] => 4
// [4] => 5
// [5] => 6
// [6] => 7
// [7] => 8
// [8] => a
// [9] => c
// [10] => d
// )
返回多个数组的笛卡尔积(cartesianProduct)
cartesianProduct(array $array = [])
Arr::cartesianProduct([['透气', '防滑'], ['37码', '38码', '39码'], ['男款', '女款']]);
// Array
// (
// [0] => 透气,37码,男款
// [1] => 透气,37码,女款
// [2] => 透气,38码,男款
// [3] => 透气,38码,女款
// [4] => 透气,39码,男款
// [5] => 透气,39码,女款
// [6] => 防滑,37码,男款
// [7] => 防滑,37码,女款
// [8] => 防滑,38码,男款
// [9] => 防滑,38码,女款
// [10] => 防滑,39码,男款
// [11] => 防滑,39码,女款
// )
二维数组根据某个字段排序(sortByKey)
sortByKey(array $array, string $keys, string $sort = SORT_DESC)
Arr::sortByKey([
['id' => 3, 'name' => "龙华区", 'pid' => 2],
['id' => 1, 'name' => "广东省", 'pid' => 0],
['id' => 2, 'name' => "深圳市", 'pid' => 1],
], 'pid'));
// Array
// (
// [0] => Array
// (
// [id] => 3
// [name] => 龙华区
// [pid] => 2
// )
// [1] => Array
// (
// [id] => 2
// [name] => 深圳市
// [pid] => 1
// )
// [2] => Array
// (
// [id] => 1
// [name] => 广东省
// [pid] => 0
// )
// )
二维数组查找某个字段或字段值(filterByField)
filterByField(array $array, string $field, $val): array
Arr::filterByField([
['id' => 3, 'name' => "龙华区", 'pid' => 2],
['id' => 1, 'name' => "广东省", 'pid' => 0],
['id' => 2, 'name' => "深圳市", 'pid' => 1],
['id' => 4, 'name' => "福田区", 'pid' => 2],
], 'pid',2));
// Array
// (
// [0] => Array
// (
// [id] => 3
// [name] => 龙华区
// [pid] => 2
// )
// [3] => Array
// (
// [id] => 4
// [name] => 福田区
// [pid] => 2
// )
// )
常用工具类
类名 | 处理类型 | 所属工具类 | 功能说明 |
---|---|---|---|
Date | 日期处理 | tools | 常用日期处理方法 |
Random | 随机处理 | tools | 产生随机数据 |
File | 文件处理 | tools | 常用的文件处理方法 |
日期类工具(Date)
use func\tools\Date;
返回指定年份开始和结束日期(year)
year(int $year = 0, bool $isTimestamp = false)
Date::year();
// Array
// (
// [start] => 2023-01-01 00:00:00
// [end] => 2023-12-31 23:59:59
// )
返回指定季度开始和结束时间(quarter)
quarter(int $season = 0, int $year = 0, bool $isTimestamp = false)
Date::quarter();
// Array
// (
// [start] => 2023-01-01 00:00:00
// [end] => 2023-03-31 23:59:59
// )
返回指定年份指定月份开始和结束日期(month)
month(int $month = 0, int $year = 0, bool $isTimestamp = false)
Date::month();
// Array
// (
// [start] => 2023-01-01 00:00:00
// [end] => 2023-01-31 23:59:59
// )
返回指定年份指定周开始和结束时间(week)
week(int $week = 0, int $year = 0, bool $isTimestamp = false)
Date::week();
// Array
// (
// [start] => 2023-01-09 00:00:00
// [end] => 2023-01-15 23:59:59
// )
时间格式化(format)
// $date支持任意格式日期(必须是时间日期格式)
// 1、长度格式不限,年、月、日、时、分、秒(可选),但必须是按照年月日时分秒顺序,如:2022、20221213、2022121212……;
// 2、分隔符不限,"","-","/",(可选),如:202212,2022-12,2022/12
format(string|int $date): string
Date::format(2005) //2005-02-01 14:07:12
Date::format("200512") //2005-12-01 14:07:12
Date::format("20051220") //2005-12-20 14:07:12
Date::format("2005122011") //2005-12-20 11:07:12
随机类工具(Random)
use func\tools\Random;
随机姓名(name)
// 支持英文名
name(string $surname = "", int $sex = 0, int $sanme = 0, string $type = "zh")
Random::name();
// Array
// (
// [surname] => 葛
// [name] => 俊宛
// [full_name] => 葛俊宛
// )
Random::name("王");
// Array
// (
// [surname] => 王
// [name] => 化瑞
// [full_name] => 王化瑞
// )
随机字符串(string)
string(int $len = 6, bool $number = true, bool $lower = true, bool $upper = false, bool $special = false)
Random::string(); // hgukx0r
随机邮箱(email)
// 支持自定义域名及国外邮箱
email(string $domain = "", int $len = 8, string $type = "zh")
Random::email();
// Array
// (
// [domain] => yeah.net
// [email] => kvpjugknk@yeah.net
// )
随机日期(dates)
// 支持指定年份和范围,默认随机近80年
dates(array $scope = [])
Random::dates();
// Array
// (
// [timestamp] => 1093197790
// [date] => 2004-08-23 02:03:10
// )
随机shenfenzheng号(identityCard)
// 支持指定地区、性别、生日,默认随机近80年
identityCard(int $regionCode = 0, int $sex = 0, int $birth = 0)
Random::identityCard(); // 370602202311081317
Random::identityCard(130107); // 130107202311081317
随机金额(amount)
amountamount($max = 100, $min = 0, $num = 2)
Random::amount(); // 36.54
随机图片(images)
images(int $width = 250, int $heigh = 160, int $limit = 1)
Random::images();
// Array
// (
// [0] => https://picsum.photos/249/160?random=f1540363-43cb-f649-47e7-0d4ffb636d7c
// )
随机头像(avatar)
avatar()
Random::avatar(); // https://api.multiavatar.com/e3428cafedb61c5e116fe526ad6bfb3f.png
随机yinhangka号(bankCard)
// 注意:仅供学习参考,请不要用于非法用途,否则后果自负
bankCard(int $type = 0, string $bank = "")
Random::bankCard();
// Array
// (
// [bank_name] => 交通银行
// [card_no] => 6282167982311568
// )
随机地址(address)
address():array
Random::address();
// Array
// (
// [province] => 湖南省
// [city] => 娄底市
// [district] => 娄星区
// [town] => 杉山镇
// [code] => 431302100000
// [address] => 湖南省娄底市娄星区杉山镇民壮村007号
// )
随机公司名称(company)
company():array
Random::company();
// Array
// (
// [city] => 泸州市
// [name] => 顿啸
// [type] => 物业管理有限公司
// [full_name] => 泸州市顿啸物业管理有限公司
// )
随机手机号码(phone)
phone(int $type = 0, int $operator = 0):array
Random::phone();
// Array
// (
// [operator] => 187
// [number] => 69551472
// )
随机ip地址(ip)
ip(): string
Random::ip(); //27.46.57.236
随机网址(website)
website(string $domain = "", string $protocol = "https", string $secondary = "www", string $type = "en"): array
Random::website();
Array
(
[protocol] => https
[secondary] => www
[domain] => cjasbkwjjsn.com
[url] => https://www.cjasbkwjjsn.com
)
随机汉字(chineseCharacters)
chineseCharacters(int $num): string
Random::chineseCharacters(5);//啥掀嘉蝗檄
文件类工具(File)
use func\tools\File;
获取文件资源路径(path)
path(string $location = ""): string
File::path(); // D:\work\project\custom\project1\public\upload\
创建文件夹(folder)
folder(string $location = ""): string
File::folder(); // D:\work\project\custom\project1\public\upload\20230301\
读取目录文件信息(readFolder)
readFolder(string $dir): array
File::readFolder("D:\\work\\project\\custom\\");
// Array
// (
// [0] => Array
// (
// [name] => Arr.php
// [type] => file
// [ctime] => 1676603881
// [mtime] => 1676603881
// [size] => 5797
// [ext] => php
// )
// [1] => Array
// (
// [name] => datas
// [type] => dir
// [ctime] => 1675733352
// [mtime] => 1676968867
// [size] => 4096
// [ext] =>
// )
// )
拷贝文件或目录(copy)
copy(string $file = "", string $dir = ""): bool
File::copy("./a/","./b/"); // true
读取文本文件内容(readTextFile)
//包括但不限于文本文件 .txt/.log/.md....
readTextFile(string $file = ""): string
File::readTextFile("./test.txt");// a b c
创建并追加内容到文件(write)
//包括但不限于文本文件 .txt/.log/.md....
(string $content = "", string $name = "", bool $isrepeat = true, string $ext = "log"): string
File::write("这是测试文字", "123.txt");// D:\Daily\project\php\tp6\123.txt
生成文件名(name)
name(string $fileName = "", string $extension = "", bool $isrepeat = false): string
File::fileName("test", "mp4"); //../public/upload/test/20230225/822c312989aadcb439956405d93f188d.mp4
文件上传(upload)
upload(array $file, string $fileName = ""): string
File::upload($_FILES, "./upload"); //./upload/20230222/20dc023d8889fb062fc2ec699c1d718c.jpg
# 使用方法
$file = File::path() . $image;
if (!file_exists($file)) {
return "文件不存在";
}
$result = Http::curl("http://tp6.com", ['file' => new \CURLFile(realpath($file))], "POST");
// 在域名对应的url(http://tp6.com)对应方法直接调用File::upload方法即可
解析远程图片(parseImage)
// 解决临时引用远程图片显示“未经允许不可引用”,注意该方法主要是用于临时测试,禁止用于正式
parseImage(string $imgUrl = "")
File::parseImage("https://xx.cn/g7/M00/01/0A/a.jpg");
解析远程媒体(parseMedia)
// 解决临时引用远程媒体文件显示“未经允许不可引用”,注意该方法主要是用于临时测试,禁止用于正式
parseMedia(string $url = "", array $header = [], $type = "image/jpg")
File::parseMedia("https://xx.cn/g7/M00/01/0A/a.jpg");
返回文件类型(contentType)
contentType(string $uri = ""): array
File::contentType("https://xx.cn/g7/M00/01/0A/a.jpg");
// Array
// (
// [type] => video/mp4
// [extension] => mp4
// )
File::extension("./0A/a.png");
// Array
// (
// [extension] => png
// [type] => image/png
// )
文件转二进制流(fileToBinaryData)
// 支持远程图片
fileToBinaryData(string $file): string
File::fileToBinaryData("D:\\desktop\\material\\background\\01梦想.png")
File::fileToBinaryData("https://www.baidu.com/img/pcdoodle_2a77789e1a67227122be09c5be16fe46.png")
图片转base64(imgToBase64)
// 支持远程图片
imgToBase64(string $image): string
File::imgToBase64("https://xx.cn/g7/M00/01/0A/a.jpg");
网络请求类工具(Http)
use func\tools\Http;
检测请求链接(check)
check(string $uri): bool
(new Http)->check($uri)
下载远程文件(wget)
wget(string $fileUrl, string $location = ""): string
Http::wget("https://xx.cn/g7/M00/01/0A/a.jpg"); //D:\work\project\custom\project1\mp4\20230302\82e71948df04cb0cb8df35af538.jpg
CURL请求(curl)
curl(string $url, array|null $data = null, string $method = "GET", array $headers = [])
Http::curl("https://xx.cn/g7/M00/01/0A/a.jpg");
版本 | 日期 | 说明 |
---|---|---|
0.1.6 | 2023-02-21 | 工具集新增文件类 |
0.1.5 | 2023-02-01 | 工具集新增随机类 |
0.1.4 | 2023-01-16 | 新增数组函数集Arry |
0.1.3 | 2023-01-14 | no message |
0.1.2 | 2023-01-12 | no message |
0.1.1 | 2023-01-09 | 新增工具类tools |
0.1.0 | 2023-01-07 | 发布第一个版本 |