fiberphp/support

🧰 FiberPHP 支持工具 —— Arr/Str/Collection 通用工具类与全局助手函数,零依赖,开箱即用。

Maintainers

Package info

gitee.com/fiberphp/support

Issues

pkg:composer/fiberphp/support

Transparency log

Statistics

Installs: 12

Dependents: 7

Suggesters: 0

dev-master 2026-08-30 15:49 UTC

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-json
  • ext-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