m22 / object-array

允许数组像对象一样工作。

0.1.1 2024-09-11 17:42 UTC

This package is auto-updated.

Last update: 2024-09-11 14:52:55 UTC


README

允许数组像对象一样工作。

使用方法链而不是嵌套函数。

use M22\ObjectArray as A;

$a = new A(['a', 'b', 'c']);

$a->diffAssoc($array1)
  ->plus($array2)
  ->sort()
  ->map($callback1)
  ->filter($callback2)
  ->keys()
  // ...

$count_letters = A::fromRange('a', 'z')->fillKeys(0);
$count_letters->t++;

$directories = A::fromExplode('/', $path);

最适合用作Composer库。

要求

安装

要将此库添加到您的Composer项目中

composer require m22/object-array

使用

有几种方法可以实例化一个新的ObjectArray

$a = new ObjectArray($array_or_object);
$b = ObjectArray::from($array_or_object);
$c = ObjectArray::fromFunction($with_arguments_or_without);

其中fromFunction()不是一个真实的方法,将其中的Function部分替换为任何现有的函数,通常返回一个数组或一个对象,并带有相应的参数。例如,fromStrSplit($string, $length)。然后该函数的结果将作为构造函数的内部输入。方法可以接受其他ObjectArray实例作为参数而不是数组。

如果是从数组实例化,它的副本将存储在新的ObjectArray中。如果是从对象实例化,则有一些特殊处理。

  • 如果是另一个ObjectArray实例或\ArrayObject实例,其内部数组的副本将存储在新的ObjectArray中。
  • 如果是\Traversable实例,则存储其迭代器的副本。
  • 否则,存储定义的可访问的非静态对象属性的关联数组。

之后,使用任何接受数组参数的函数作为ObjectArray方法,而不需要提供数组参数。例如

  • $object_array->filter($callback)类似于array_filter($array, $callback)
  • $object_array->diffKey($array2)类似于array_diff_key($array, $array2)
  • $object_array->reset()类似于reset($array)等。

如果该函数返回一个数组,ObjectArray实例将用该函数的结果替换其内部数组,并返回自身以进行链式调用。否则,它返回函数的结果。方法可以接受其他ObjectArray实例作为参数而不是数组:$object_array->diffKey($object_array2)

ObjectArray的内部数组存储在公共array属性($object_array->array)中,因此可以在任何时候访问或覆盖。

还有其他情况下,ObjectArray实例的行为与其构造的数组相同

  • 使用方括号语法访问/创建/修改数组元素(这些操作中的一些也可以使用对象->属性语法完成)
$a = new ObjectArray(['a', $b, 'C' => $c]);

$a[1] === $b; // True.
$a['C'] === $c; // True.

$a[] = 'd';

$a['E'] = 1;
$a['E']++;

isset($a[0]);
unset($a['C']);
  • 数组解构
[$a, $b, $c] = new ObjectArray([1, 2, 3]);
['a' => $a, 'b' => $b] = new ObjectArray(['a' => 1, 'b' => 2])
  • 数组解包
$array = [...ObjectArray::from(['a', 'b', 'c'])];
  • 遍历
foreach (ObjectArray::from(['a' => 1, 'b' => 2]) as $key => $value)
  • JSON编码
json_encode(new ObjectArray($array)) === json_encode($array); // True.

开发

当推出新的主要(或次要)PHP版本时,需要重新生成ObjectArray方法。

  1. 在整个项目中更新PHP版本(composer.*, README等)
  2. MethodsGenerator类中审查/更新CORE_MODULES列表。
  3. 运行composer generate
  4. 创建新的git分支,在那里提交更改,并添加标签。