fiberphp / helper
🧰 FiberPHP 通用工具集 —— Arr / Str / Collection 与全局助手函数。
Requires
- php: >=8.3
- ext-ctype: *
- ext-json: *
- ext-mbstring: *
Requires (Dev)
- phpunit/phpunit: ^11.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-09-24 14:50:11 UTC
README
FiberPHP 通用工具库,提供 Arr / Str / Collection 通用类与一组全局助手函数。
环境要求
- PHP >= 8.3
ext-jsonext-mbstring
无任何 Composer 运行时依赖。
安装
composer require fiberphp/helper
Arr
数组操作工具,支持「点号」多维取值与多种变换:
use FiberPHP\Helper\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\Helper\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::plural('user'); // 'users'(约定表名)
Str::random(16); // 随机字符串
Collection
继承 ArrayObject,天然实现 Countable / IteratorAggregate / ArrayAccess / JsonSerializable,对数组的链式封装:
use function FiberPHP\Helper\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(...)) 防冲突),由 framework 显式 require 加载:
| 函数 | 说明 |
|---|---|
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) |
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'); // 订单所有商品价格