bocharsky-bw/arrayzy

一个以面向对象方式轻松操作的本地PHP数组库。

v0.6.1 2016-07-20 17:49 UTC

This package is auto-updated.

Last update: 2024-08-29 04:14:25 UTC


README

所有PHP内置数组的包装器,以及一个简单易用的面向对象数组操作库。简而言之:强化的数组。

Travis Status HHVM Status Scrutinizer Code Quality Code Coverage Software License Latest Version

SensioLabsInsight

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

内容

要求

  • 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 arraystring、可读的 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

包含键

array_key_exists()相关。

$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'

排除

基于array_diff_key()

没有给定键的数组片段。

$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

交集

array_intersect()相关。

$a = A::create(['a', 'b', 'c']);
$a = $a->intersect(['b', 'c']);
$a->toArray(); // [1 => 'b', 2 => 'c']

交集关联

array_intersect_assoc()相关。

$a = A::create(['one' => 'a', 'two' => 'b', 'three' => 'c']);
$a = $a->intersectAssoc(['two' => 'b', 'four' => 'c']);
$a->toArray(); // ['two' => 'b']

交集键

array_intersect_key()相关。

$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']

合并

array_merge() / array_merge_recursive()相关。

// 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']

基于array_intersect_key()

只包含给定键的数组片段。

$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'

重索引

基于array_values()

$a = A::create([2 => 'a', 1 => 'b', 3 => 'c']);
$a = $a->reindex();
$a->toArray(); // [0 => 'a', 1 => 'b', 2 => 'c']

替换

array_replace() / array_replace_recursive()相关。

$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']

排序

arsort() / sort() / asort() / rsort()相关。

$a = A::create(['b', 'a', 'd', 'c']);
$a->sort(SORT_DESC);
$a->toArray(); // [0 => 'd', 1 => 'c', 2 => 'b', 3 => 'a']

排序键

ksort() / krsort()相关。

$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

向上移动