bocharsky-bw / arrayzy
一个以面向对象方式轻松操作的本地PHP数组库。
Requires
- php: >=5.4
- ext-json: *
Requires (Dev)
- phpunit/phpunit: ^4.5|^5.0
This package is auto-updated.
Last update: 2024-08-29 04:14:25 UTC
README
所有PHP内置数组的包装器,以及一个简单易用的面向对象数组操作库。简而言之:强化的数组。
ArrayImitator
这是本库的主要类。每个方法都与相应的原生PHP函数相关联,保持其行为。换句话说:方法可以创建一个新数组(不改变原始数组),在同一个数组上操作(返回数组本身且不创建新实例)或返回某些结果。
注意:如果方法创建了一个新数组,但您不需要操作的第一个数组,您可以手动覆盖它。
use Arrayzy\ArrayImitator as A; $a = A::create(['a', 'b', 'c']); $a = $a->reverse(); // override instance you operates on, because $a !== $a->reverse()
注意:如果方法在同一个数组上操作,但您需要保持操作的第一个数组不变,您可以先手动克隆它。
use Arrayzy\ArrayImitator as A; $a = A::create(['a', 'b', 'c']); $b = clone $a; $b->shuffle(); // keeps $a unchanged, because $a !== $b
内容
- 要求
- 安装
- 创建
- 使用
- 公共方法列表
- 添加
- 分块
- 清除
- 组合
- 包含
- 包含键
- 计数
- 创建
- 创建克隆
- 从JSON创建
- 从对象创建
- 从字符串创建
- 通过范围创建
- 当前
- 自定义排序
- 自定义排序键
- 调试
- 差异
- each
- 结束
- 排除
- 存在
- 导出
- 过滤
- 查找
- 第一个
- 翻转
- 获取迭代器
- 获取键
- 获取随机值
- 获取随机键
- 获取随机键列表
- 获取随机值列表
- 获取值
- 索引
- 交集
- 交集关联
- 交集键
- 是否关联
- 是否为空
- 是否为数字
- 键
- 最后一个
- 映射
- 合并
- 下一个
- 偏移存在
- 偏移获取
- 偏移设置
- 偏移删除
- 仅
- 填充
- 弹出
- 上一个
- 推送
- 减少
- 重索引
- 替换
- 重置
- 反转
- 搜索
- 移除
- 洗牌
- 切片
- 排序
- 排序键
- 转换为数组
- 转换为JSON
- 转换为可读字符串
- 转换为字符串
- 唯一
- 推送到数组开头
- 遍历
- 贡献
- 链接
要求
- PHP
5.4
或更高版本 - PHP
JSON
扩展
安装
安装此包的首选方式是使用 Composer
$ composer require bocharsky-bw/arrayzy
如果您不使用 Composer
- 手动注册此包到您的自动加载器,或下载此库并在您的脚本中直接 require
所需的文件
require_once __DIR__ . '/path/to/library/src/ArrayImitator.php';
创建
使用 new
语句创建一个新的空数组。
use Arrayzy\ArrayImitator; $a = new ArrayImitator; // Creates a new instance with the "use" statement // or $a = new \Arrayzy\ArrayImitator; // Creates a new array by fully qualified namespace
注意:不要忘记命名空间。如果您想简化,可以使用 命名空间别名
use Arrayzy\ArrayImitator as A; $a = new A; // Creates a new instance using namespace alias
通过将数组作为参数传递给构造函数来创建一个具有默认值的数组。
$a = new A([1, 2, 3]); // or $a = new A([1 => 'a', 2 => 'b', 3 => 'c']);
此外,您还可以使用以 'create' 前缀的公共静态方法之一创建新对象。
使用
您可以像使用熟悉的PHP数组语法一样访问值。
use Arrayzy\ArrayImitator as A; $a = A::create(['a', 'b', 'c']); $a[] = 'e'; // or use $a->offsetSet(null, 'e') method $a->toArray(); // [0 => 'a', 1 => 'b', 2 => 'c', 3 => 'e'] $a[3] = 'd'; // or use $a->offsetSet(3, 'd') method $a->toArray(); // [0 => 'a', 1 => 'b', 2 => 'c', 3 => 'd'] print $a[1]; // 'b' // or use the corresponding method print $a->offsetGet(1); // 'b'
注意:以下方法和原则适用于 ArrayImitator
类。以下示例中,ArrayImitator
使用 A
作为别名。
链式调用
方法可以链式调用,以便更容易使用。
$a = A::create(['a', 'b', 'c']); $a ->offsetSet(null, 'e') ->offsetSet(3, 'd') ->offsetSet(null, 'e') ->shuffle() // or any other method that returns $this ; $a->toArray(); // [0 => 'c', 1 => 'a', 2 => 'e', 3 => 'd', 4 => 'b']
转换
轻松将实例数组元素转换为简单的PHP array
、string
、可读的 string
或JSON格式。
调试
公共方法列表
添加
与
$a[] = 'new item'
关联。
$a = A::create(['a', 'b', 'c']); $a->add('d'); $a->toArray(); // [0 => 'a', 1 => 'b', 2 => 'c', 3 => 'd']
分块
与array_chunk()相关。
$a = A::create(['a', 'b', 'c']); $a = $a->chunk(2); $a->toArray(); // [0 => [0 => 'a', 1 => 'b'], 1 => [0 => 'c']]
清除
与
$a = []
相关。
$a = A::create(['a', 'b', 'c']); $a->clear(); $a->toArray(); // []
组合
与array_combine()相关。
$a = A::create([1, 2, 3]); $a->combine(['a', 'b', 'c']); $a->toArray(); // [1 => 'a', 2 => 'b', 3 => 'c']
包含
与in_array()相关。
$a = A::create(['a', 'b', 'c']); $a->contains('c'); // true
包含键
$a = A::create(['a', 'b', 'c']); $a->containsKey(2); // true
计数
与count()相关。
$a = A::create(['a', 'b', 'c']); $a->count(); // 3
创建
$a = A::create(['a', 'b', 'c']); $a->toArray(); // [0 => 'a', 1 => 'b', 2 => 'c']
创建克隆
创建数组的浅拷贝。
请注意,在PHP中,变量只包含对象的引用,而不是对象本身。
$a = A::create(['a', 'b', 'c']); $b = $a; // $a and $b are different variables referencing the same object ($a === $b)
所以如果你不想修改当前数组,你需要先手动克隆它。
$a = A::create(['a', 'b', 'c']); $b = clone $a; // $a and $b are different instances ($a !== $b) // or do it with built-in method $b = $a->createClone(); // $a !== $b
从JSON创建
与json_decode()相关。
通过解析JSON字符串创建数组。
$a = A::createFromJson('{"a": 1, "b": 2, "c": 3}'); $a->toArray(); // ['a' => 1, 'b' => 2, 'c' => 3]
从对象创建
从实现了\ArrayAccess
接口的任何object
创建实例数组。
$a = A::create(['a', 'b', 'c']); $b = A::createFromObject($a); // where $a could be any object that implemented \ArrayAccess interface $b->toArray(); // [0 => 'a', 1 => 'b', 2 => 'c']
从字符串创建
与explode()相关。
使用指定的分隔符从简单的PHP string
创建数组。
$a = A::createFromString('a;b;c', ';'); $a->toArray(); // [0 => 'a', 1 => 'b', 2 => 'c']
通过范围创建
与range()相关。
创建指定范围的数组。
$a = A::createWithRange(2, 6, 2); $a->toArray(); // [0 => 2, 1 => 4, 2 => 6]
当前
与current()相关。
迭代器的位置。
$a = A::create(['a', 'b', 'c']); $a->current(); // 'a'
自定义排序
与usort()相关。
$a = A::create(['b', 'a', 'c']); $a->customSort(function($a, $b) { if ($a === $b) { return 0; } return ($a < $b) ? -1 : 1; }); $a->toArray(); // [0 => 'a', 1 => 'b', 2 => 'c']
自定义排序键
与uksort()相关。
$a = A::create([1 => 'b', 0 => 'a', 2 => 'c']); $a->customSortKeys(function($a, $b) { if ($a === $b) { return 0; } return ($a < $b) ? -1 : 1; }); $a->toArray(); // [0 => 'a', 1 => 'b', 2 => 'c']
调试
与print_r()相关。
$a = A::create(['a', 'b', 'c']); $a->debug(); // Array ( [0] => a [1] => b [2] => c )
差异
与array_diff()相关。
$a = A::create(['a', 'b', 'c']); $a = $a->diff(['c', 'd']); $a->toArray(); // [0 => 'a', 1 => 'b']
each
与each()相关。
$a = A::create(['a', 'b', 'c']); $a->each(); // [0 => 0, 'key' => 0, 1 => 'a', 'value' => 'a']
结束
与end()相关。
$a = A::create(['a', 'b', 'c']); $a->end(); // 'c'
排除
没有给定键的数组片段。
$a = A::create(['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5]); $a = $a->except(['b', 'e']); $a->toArray(); // ['a' => 1, 'c' => 3, 'd' => 4]
存在
一个自定义包含方法,您可以在任何可调用函数中提供自己的自定义逻辑。
$a = A::create(['a', 'b', 'c']); $a->exists(function($key, $value) { return 1 === $key and 'b' === $value; }); // true
导出
与var_export()相关。
$a = A::create(['a', 'b', 'c']); $a->export(); // array ( 0 => 'a', 1 => 'b', 2 => 'c', )
过滤
与array_filter()相关。
$a = A::create(['a', 'z', 'b', 'z']); $a = $a->filter(function($value) { return 'z' !== $value; // exclude 'z' value from array }); $a->toArray(); // [0 => 'a', 2 => 'b']
查找
一个自定义查找方法,您可以在任何可调用函数中提供自己的自定义逻辑。
$a = A::create(['a', 'b', 'c']); $a->find(function($value, $key) { return 'b' == $value && 0 < $key; }); // 'b'
第一个
是reset的别名。
$a = A::create(['a', 'b', 'c']); $a->first(); // 'a'
翻转
与array_flip()相关。
$a = A::create(['a', 'b', 'c']); $a = $a->flip(); $a->toArray(); // ['a' => 0, 'b' => 1, 'c' => 2]
获取迭代器
创建一个外部迭代器。有关更多信息,请参阅iteratorAggregate文档。
获取键
与array_keys()相关。
$a = A::create(['a' => 1, 'b' => 2, 'c' => 3]); $a->getKeys(); // [0 => 'a', 1 => 'b', 2 => 'c']
获取随机值
与array_rand()相关。
$a = A::create(['a', 'b', 'c', 'd']); $a->getRandom(); // 'c'
获取随机键
与array_rand()相关。
$a = A::create(['a', 'b', 'c', 'd']); $a->getRandomKey(); // 2
获取随机键列表
与array_rand()相关。
$a = A::create(['a', 'b', 'c', 'd']); $a->getRandomKeys(2); // [0, 2]
获取随机值列表
与array_rand()相关。
$a = A::create(['a', 'b', 'c', 'd']); $a->getRandomValues(2); // ['b', 'd']
获取值
与array_values()相关。
$a = A::create([1 => 'a', 2 => 'b', 3 => 'c']); $a->getValues(); // [0 => 'a', 1 => 'b', 2 => 'c']
索引
是search的别名。
$a = A::create(['a', 'b', 'c']); $a->indexOf('b'); // 1
交集
$a = A::create(['a', 'b', 'c']); $a = $a->intersect(['b', 'c']); $a->toArray(); // [1 => 'b', 2 => 'c']
交集关联
$a = A::create(['one' => 'a', 'two' => 'b', 'three' => 'c']); $a = $a->intersectAssoc(['two' => 'b', 'four' => 'c']); $a->toArray(); // ['two' => 'b']
交集键
$a = A::create(['one' => 'a', 'two' => 'b', 'three' => 'c']); $a = $a->intersectKey(['two' => 'd', 'three' => 'e']); $a->toArray(); // ['two' => 'b', 'three' => 'c']
是否关联
检查数组中的所有键是否为关联。
$a = A::create(['key' => 'value']); $a->isAssoc(); // true
是否为空
检查数组是否为空。
$a = A::create([]); $a->isEmpty(); // true
是否为数字
检查数组中的所有键是否为数字。
$a = A::create(['a', 'b', 'c']); $a->isNumeric(); // true
键
与key()相关。
$a = A::create(['a', 'b', 'c']); $a->current(); // 'a' $a->key(); // 0 $a->next(); // 'b' $a->key(); // 1
最后一个
是end的别名。
$a = A::create(['a', 'b', 'c']); $a->last(); // 'c'
映射
与array_map()相关。
$a = A::create(['a', 'b', 'c']); $a = $a->map(function($value) { return $value . $value; }); $a->toArray(); // [0 => 'aa', 1 => 'bb', 2 => 'cc']
合并
// indexed array behavior $a = A::create(['a', 'b', 'c']); // create indexed array $a = $a->merge(['c', 'd']); $a->toArray(); // [0 => 'a', 1 => 'b', 2 => 'c', 3 => 'c', 4 => 'd'] // assoc array behavior $b = A::create(['a' => 1, 'b' => 2, 'c' => 99]); // create assoc array $b = $b->merge(['c' => 3, 'd' => 4]); $b->toArray(); // ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4]
下一个
与next()相关。
$a = A::create(['a', 'b', 'c']); $a->next(); // 'b' $a->next(); // 'c'
偏移存在
实现了ArrayAccess接口。
$a = A::create(['a', 'b', 'c']); $a->offsetExists(2); // true (or use isset($a[2])) $a->offsetExists(3); // false (or use isset($a[3]))
偏移获取
实现了ArrayAccess接口。
$a = A::create(['a', 'b', 'c']); $a->offsetGet(1); // 'b' (or use $a[1])
偏移设置
实现了ArrayAccess接口。
$a = A::create(['a', 'b', 'd']); // add a new value $a->offsetSet(null, 'd'); // or use $a[] = 'd'; $a->toArray(); // [0 => 'a', 1 => 'b', 2 => 'd', 3=> 'd'] // replace an existing value by key $a->offsetSet(2, 'c'); // or use $a[2] = 'c'; $a->toArray(); // [0 => 'a', 1 => 'b', 2 => 'c', 3=> 'd']
偏移删除
实现了ArrayAccess接口。
$a = A::create(['a', 'b', 'c']); $a->offsetUnset(1); // or use unset($a[1]); $a->toArray(); // [0 => 'a', 2 => 'c']
仅
只包含给定键的数组片段。
$a = A::create(['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5]); $a = $a->only(['b', 'e']); $a->toArray(); // ['b' => 2, 'e' => 5]
填充
与array_pad()相关。
$a = A::create(['a', 'b', 'c']); $a = $a->pad(5, 'z'); $a->toArray(); // [0 => 'a', 1 => 'b', 2 => 'c', 3 => 'z', 4 => 'z']
弹出
与array_pop()相关。
$a = A::create(['a', 'b', 'c']); $a->pop(); // 'c' $a->toArray(); // [0 => 'a', 1 => 'b']
上一个
与prev()相关。
$a = A::create(['a', 'b', 'c']); $a->next(); // 'b' $a->next(); // 'c' $a->previous(); // 'b'
推送
与array_push()相关。
$a = A::create(['a', 'b']); $a->push('c', 'd'); $a->toArray(); // [0 => 'a', 1 => 'b', 2 => 'c', 3 => 'd']
push()
方法允许传递多个参数。
减少
与array_reduce()相关。
$a = A::create(['a', 'b', 'c']); $a = $a->reduce(function($result, $item) { return $result . $item; }); // 'abc'
重索引
$a = A::create([2 => 'a', 1 => 'b', 3 => 'c']); $a = $a->reindex(); $a->toArray(); // [0 => 'a', 1 => 'b', 2 => 'c']
替换
$a = A::create(['a', 'd', 'e']); $a = $a->replace([1 => 'b', 2 => 'c']); $a->toArray(); // [0 => 'a', 1 => 'b', 2 => 'c']
重置
与reset()相关。
$a = A::create(['a', 'b', 'c']); $a->reset(); // 'a'
反转
与array_reverse()相关。
$a = A::create(['a', 'b', 'c']); $a = $a->reverse(); $a->toArray(); // [0 => 'c', 1 => 'b', 2 => 'a']
搜索
与array_search()相关。
$a = A::create(['a', 'b', 'c']); $a->search('b'); // 1
移除
与array_shift()相关。
$a = A::create(['a', 'b', 'c']); $a->shift(); $a->toArray(); // [0 => 'b', 1 => 'c']
洗牌
与shuffle()相关。
$a = A::create(['a', 'b', 'c']); $a->shuffle(); $a->toArray(); // [0 => 'c', 1 => 'a', 2 => 'b']
切片
与array_slice()相关。
$a = A::create(['a', 'b', 'c', 'd']); $a = $a->slice(1, 2); $a->toArray(); // [0 => 'b', 1 => 'c']
排序
$a = A::create(['b', 'a', 'd', 'c']); $a->sort(SORT_DESC); $a->toArray(); // [0 => 'd', 1 => 'c', 2 => 'b', 3 => 'a']
排序键
$a = A::create([3 => 'a', 1 => 'b', 2 => 'c', 0 => 'd']); $a->sortKeys(SORT_ASC); $a->toArray(); // [0 => 'd', 1 => 'b', 2 => 'c', 3 => 'a']
转换为数组
将数组转换为简单的PHP array
类型。
$a = A::create(['a', 'b', 'c']); $a->toArray(); // [0 => 'a', 1 => 'b', 2 => 'c']
转换为JSON
与json_encode()相关。
从数组创建JSON字符串。
$a = A::create(['a' => 1, 'b' => 2, 'c' => 3]); $a->toJson(); // { "a": 1, "b": 2, "c": 3 }
转换为可读字符串
基于implode()。
将实例数组转换为可读的PHP string
。
$a = A::create(['a', 'b', 'c']); $a->toReadableString(', ', ' and '); // 'a, b and c'
转换为字符串
与 implode() 相关。
将实例数组转换为简单的 PHP string
$a = A::create(['a', 'b', 'c']); $a->toString(', '); // 'a, b, c'
唯一
与 array_unique() 相关。
$a = A::create(['a', 'b', 'b', 'c']); $a = $a->unique(); $a->toArray(); // [0 => 'a', 1 => 'b', 3 => 'c']
推送到数组开头
与 array_unshift() 相关。
$a = A::create(['a', 'b']); $a->unshift('y', 'z'); $a->toArray(); // [0 => 'y', 1 => 'z', 2 => 'a', 3 => 'b']
方法
unshift()
允许传入多个参数。
遍历
与 array_walk() / array_walk_recursive() 相关。
$a = A::create(['a', 'b', 'c']); $a->walk(function(&$value, $key) { $key++; // the $key variable passed by value, (original value will not modified) $value = $value . $key; // the $value variable passed by reference (modifies original value) }); $a->toArray(); // [0 => 'a1', 1 => 'b2', 2 => 'c3']
贡献
如果您发现错误或有改进建议,请随意提交 Issue 或创建 Pull Request。
为了提出新的功能,最好的方式是先提交 Issue 并进行讨论。
链接
Arrayzy 受到 Doctrine ArrayCollection 类和 Stringy 库的启发。
如果您正在寻找一个以 OOP 方式编写的 PHP string 操作库,请查看 Stringy。