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

This package is auto-updated.

Last update: 2025-05-20 11:24:23 UTC


README

License Php Version Packagist Version star fork blog

一个简洁小巧且功能完善的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.62023-02-21工具集新增文件类
0.1.52023-02-01工具集新增随机类
0.1.42023-01-16新增数组函数集Arry
0.1.32023-01-14no message
0.1.22023-01-12no message
0.1.12023-01-09新增工具类tools
0.1.02023-01-07发布第一个版本

最新记录

panxu/phpfunc