fiberphp / support
🧰 FiberPHP 支持工具 —— Arr/Str/Collection 通用工具类与全局助手函数,零依赖,开箱即用。
Requires
- php: >=8.3
- ext-json: *
- ext-mbstring: *
Requires (Dev)
- phpunit/phpunit: ^11.0
This package is auto-updated.
Last update: 2026-08-30 15:50:00 UTC
README
FiberPHP 支持工具库。零依赖纯工具集,提供 Arr / Str / Collection 通用类与一组全局助手函数,命名空间 FiberPHP\Support,开箱即用。
环境要求
- PHP >= 8.3
ext-jsonext-mbstring
无任何 composer 运行时依赖。
安装
composer require fiberphp/support
src/helpers.php 通过 autoload.files 自动加载,助手函数全局可用。
Arr
数组操作工具,支持「点号」多维取值与多种变换:
use FiberPHP\Support\Arr;
// 点号取值
Arr::get($array, 'user.address.city', 'default');
Arr::set($array, 'a.b.c', 1);
Arr::has($array, 'a.b.c');
// 变换
Arr::only($array, ['id', 'name']);
Arr::except($array, ['password']);
Arr::pluck($rows, 'name', 'id'); // 二维数组提取列
Arr::flatten($array, 1); // 降维
Arr::collapse([[1, 2], [3, 4]]); // [1, 2, 3, 4]
Arr::first($array, fn ($v) => $v > 0);
Arr::where($array, fn ($v) => is_string($v));
// 树/深合并
Arr::toTree($flatList, 'id', 'pid', 'children');
Arr::mergeDeep($a, $b);
主要方法:accessible / add / collapse / crossJoin / divide / dot / except / exists / first / last / flatten / forget / get / has / isAssoc / only / pluck / prepend / pull / random / set / shuffle / sort / sortRecursive / query / where / wrap / mergeDeep / flatMap / toTree。
Str
字符串工具,内置 mbstring 多字节安全方法,命名风格转换有进程内缓存:
use FiberPHP\Support\Str;
Str::contains('hello world', ['hello', 'hi']);
Str::startsWith('HelloPHP', 'Hello');
Str::endsWith('user_id', '_id');
Str::length('你好'); // 2
Str::substr('你好世界', 1, 2); // '好世'
Str::lower('ABC'); Str::upper('abc');
Str::snake('UserService'); // 'user_service'
Str::camel('user_name'); // 'userName'
Str::studly('user_name'); // 'UserName'
Str::title('hello world'); // 'Hello World'
Str::random(16); // 随机字符串
Collection
继承 ArrayObject,天然实现 Countable / IteratorAggregate / ArrayAccess / JsonSerializable,对数组的链式封装:
use function FiberPHP\Support\collect;
$items = collect(['apple', 'banana', 'cherry'])
->map(fn ($v) => strtoupper($v))
->filter(fn ($v) => str_starts_with($v, 'B'))
->values();
collect($users)
->each(fn ($u) => $u->save())
->pluck('name')
->chunk(10)
->sort();
主要方法:first / last / each / map / filter / contains / reduce / chunk / sort / slice / merge / pluck / flip / keys / values / isEmpty / toArray / all。
助手函数
src/helpers.php 全局函数(if (!function_exists(...)) 防冲突):
| 函数 | 说明 |
|---|---|
value($value) | 解析 Closure 为返回值,非闭包原样返回 |
collect(?array $v) | 创建 Collection |
data_get($target, $key, $default) | 点号取值,支持 * 通配符(数组与对象) |
data_set(&$target, $key, $value, $overwrite) | 点号设值,* 通配符批量设值 |
data_fill(&$target, $key, $value) | 仅在缺失时设值(data_set 的 $overwrite=false) |
path_combine($front, $back) | 拼接路径(后缀以分隔符开头时先去除) |
copy_dir($source, $dest, $overwrite) | 递归拷贝目录或文件 |
remove_dir($dir) | 递归删除目录、文件、符号链接 |
get_realpath($path) | 真实路径(phar:// 协议原样返回) |
cpu_count() | CPU 核心数(Linux 解析 /proc/cpuinfo,其他回退 4) |
// 点号 + 通配符取值
data_get($users, '*.name'); // 所有用户的 name
data_get($order, 'items.*.price'); // 订单所有商品价格
// 路径拼接
path_combine('/var/log', 'app/foo.log'); // /var/log/app/foo.log
目录结构
src/
├── Arr.php # 数组工具(30+ 静态方法)
├── Str.php # 字符串工具(含 snake/camel/studly 缓存)
├── Collection.php # 通用集合(ArrayObject 链式封装)
└── helpers.php # 全局助手函数
License
MIT License (c) 2026 庞斌,详见 LICENSE。