breier/extended-array

一个扩展PHP-SPL ArrayIterator并实现从PHP普通数组处理中获取大量功能的类

2.1.0 2020-05-03 16:13 UTC

This package is auto-updated.

Last update: 2024-09-29 05:48:47 UTC


README

这个库起源于关于使用 "reset()" 获取数组第一个元素是否直观的讨论。我认为这并不直观!

为了以整洁的代码方式(可读性和可维护性)处理数组和其元素,我开发了这个库。请尽情享受(自行承担风险 XD)。

目录

来自ArrayIterator的方法

您可以在 php.net/manual/class.arrayiterator 找到所有方法和它们的文档。

以下是未修改的方法列表

* "append" 被间接修改,因为它内部使用 "offsetSet"。

ExtendedArrayBase中的方法

这是一个抽象类,它修改了ArrayIterator的行为,以改进其作为整洁的面向对象类的使用。

  • 它接受以下类型之一作为参数进行实例化
    • (null, array, \SplFixedArray, \ArrayObject, \ArrayIterator);
  • 它将默认标志设置为 ARRAY_AS_PROPS;
  • 它将所有子数组转换为其类的子实例;
  • 它使用一个内部定位系统来帮助导航(下一个,前一个等);
  • 它有一个返回JSON的内置 __toString 方法;
以下是完整的方法列表

ExtendedArray中的方法

arsort(): ExtendedArray

按元素进行反向排序。

代码示例
<?php
$cities = new ExtendedArray(['Dublin', 'Paris', 'Cairo', 'Tokyo']);
print($cities->arsort());
/**
 * {
 *   "3": "Tokyo",
 *   "1": "Paris",
 *   "0": "Dublin",
 *   "2": "Cairo"
 * }
 */

contains(mixed $needle[, bool $strict]): bool

contains类似于"in_array",支持对象。

代码示例
<?php
$cities = new ExtendedArray(['Dublin', 'Paris', 'Cairo', 'Tokyo']);
var_dump($cities->contains('Cairo')); // true
var_dump($cities->contains('Kyoto')); // false
var_dump($cities->contains($cities->{1})); // true

diff($array2, ...$arrays): ExtendedArray

diff类似于"array_diff",支持对象。

代码示例
<?php
$array1 = new ExtendedArray(["a" => "green", "red", "blue", 7 => ["red", "yellow"]]);
$array2 = new ExtendedArray(["b" => "green", "yellow", "red"]);
print($array1->diff($array2));
/**
 * {
 *   "1": "blue",
 *   "7": {"0":"red","1":"yellow"}
 * }
 */

explode(string $delimiter, string $string[, int $limit = PHP_INT_MAX]): ExtendedArray

[static] 通过分隔符拆分字符串创建实例

代码示例
<?php
print(ExtendedArray::explode(',', 'Dublin,Paris,Cairo,Tokyo'));
/**
 * {
 *   "0": "Dublin",
 *   "1": "Paris",
 *   "2": "Cairo",
 *   "3": "Tokyo"
 * }
 */

fill(int $start, int $num, $value): ExtendedArray

[static] 创建一个填充了指定值的数组

代码示例
<?php
print(ExtendedArray::fill(0, 3, "test"));
/**
 * {
 *   "0": "test",
 *   "1": "test",
 *   "2": "test"
 * }
 */

filter([callable $callback[, int $flag]]): ExtendedArray

array_filter的poly-fill。

代码示例
<?php
$cities = new ExtendedArray(['Dublin', 'Paris', 'Cairo', 'Tokyo']);
print(
  $cities->filter(
    function ($item) {
      return strlen($item) == 5;
    }
  )
);
/**
 * {
 *   "1": "Paris",
 *   "2": "Cairo",
 *   "3": "Tokyo"
 * }
 */

filterWithObjects([callable $callback[, int $flag]]): ExtendedArray

扩展filter以支持对象。

代码示例
<?php
$cities = new ExtendedArray(['Dublin', 'Paris', 'Cairo', 'Tokyo']);
$countries = new ExtendedArray(['Ireland', 'France', 'Egypt', 'Japan']);
$places = new ExtendedArray(['cities' => $cities, 'countries' => $countries]);
print(
  $places->filterWithObjects(
    function ($item) {
      return $item->count();
    }
  )
);
/**
 * {
 *   "cities": {
 *     "0": "Dublin",
 *     "1": "Paris",
 *     "2": "Cairo",
 *     "3": "Tokyo"
 *   },
 *   "countries": {
 *     "0": "Ireland",
 *     "1": "France",
 *     "2": "Egypt",
 *     "3": "Japan"
 *   }
 * }
 */

fromJSON(string $json[, int $depth]): ExtendedArray

[static] 从JSON字符串创建实例。

代码示例
<?php
$jsonCities = '{"Dublin","Paris","Cairo","Tokyo"}';
print(
  ExtendedArray::fromJSON($jsonCities)
);
/**
 * {
 *   "0": "Dublin",
 *   "1": "Paris",
 *   "2": "Cairo",
 *   "3": "Tokyo"
 * }
 */

isArray(mixed $element): bool

[static] 验证任何类型的数组。

代码示例
<?php
$plainArray = ['Dublin', 'Paris', 'Cairo', 'Tokyo'];
$cities = new ExtendedArray($plainArray);
var_dump(ExtendedArray::isArray($plainArray)); // true
var_dump(ExtendedArray::isArray($cities));     // true
var_dump(ExtendedArray::isArray('not array')); // false

implode(string $glue = ''): string

通过$glue连接数组值并生成字符串

代码示例
<?php
$cities = new ExtendedArray(['Dublin', 'Paris', 'Cairo', 'Tokyo']);
print($cities->implode(',')); // Dublin,Paris,Cairo,Tokyo

keys(): ExtendedArray

获取此数组的键(属性名称)。

代码示例
<?php
$cities = new ExtendedArray(
  [
    'Ireland' => 'Dublin',
    'France' => 'Paris',
    'Egypt' => 'Cairo',
    'Japan' => 'Tokyo'
  ]
);
print($cities->keys());
/**
 * {
 *   "0": "Ireland",
 *   "1": "France",
 *   "2": "Egypt",
 *   "3": "Japan"
 * }
 */

krsort(): ExtendedArray

按键进行反向排序。

代码示例
<?php
$cities = new ExtendedArray(
  [
    'Ireland' => 'Dublin',
    'France' => 'Paris',
    'Egypt' => 'Cairo',
    'Japan' => 'Tokyo'
  ]
);
print($cities->krsort());
/**
 * {
 *   "Japan": "Tokyo",
 *   "Ireland": "Dublin",
 *   "France": "Paris",
 *   "Egypt": "Cairo"
 * }
 */

map(callable $callback[, array ...$params]): ExtendedArray

array_map的poly-fill。

代码示例
<?php
$cities = new ExtendedArray(['Dublin', 'Paris', 'Cairo', 'Tokyo']);
print(
  $cities->map(
    function ($item) {
      return strrev($item);
    }
  )
);
/**
 * {
 *   "0": "nilbuD",
 *   "1": "siraP",
 *   "2": "oriaC",
 *   "3": "oykoT"
 * }
 */

mapWithObjects(callable $callback[, array ...$params]): ExtendedArray

扩展map以支持对象。

代码示例
<?php
$cities = new ExtendedArray(['Dublin', 'Paris', 'Cairo', 'Tokyo']);
$countries = new ExtendedArray(['Ireland', 'France', 'Egypt', 'Japan']);
$places = new ExtendedArray(['cities' => $cities, 'countries' => $countries]);
print(
  $places->mapWithObjects(
    function ($item) {
      return $item->filter(
        function ($element) {
          return strlen($element) == 5;
        }
      )->jsonEncode();
    }
  )
);
/**
 * {
 *   "cities": "{\"1\":\"Paris\",\"2\":\"Cairo\",\"3\":\"Tokyo\"}",
 *   "countries": "{\"2\":\"Egypt\",\"3\":\"Japan\"}"
 * }
 */

offsetGetFirst(): mixed

获取第一个元素,不移动数组游标。

代码示例
<?php
$cities = new ExtendedArray(['Dublin', 'Paris', 'Cairo', 'Tokyo']);
print($cities->offsetGetFirst());
/**
 * Dublin
 */

offsetGetLast(): mixed

获取最后一个元素,不移动数组游标。

代码示例
<?php
$cities = new ExtendedArray(['Dublin', 'Paris', 'Cairo', 'Tokyo']);
print($cities->offsetGetLast());
/**
 * Tokyo
 */

offsetGetPosition(int $position): mixed

获取指定位置的元素,不移动数组游标。

代码示例
<?php
$cities = new ExtendedArray(['Dublin', 'Paris', 'Cairo', 'Tokyo']);
print($cities->offsetGetPosition(1));
/**
 * Paris
 */

shuffle(): ExtendedArray

随机排列元素。

代码示例
<?php
$cities = new ExtendedArray(['Dublin', 'Paris', 'Cairo', 'Tokyo']);
print($cities->shuffle());
/**
 * {
 *   "1": "Paris",
 *   "0": "Dublin",
 *   "3": "Tokyo",
 *   "2": "Cairo"
 * }
 */

values(): ExtendedArray

在数字键数组中获取值

代码示例
<?php
$cities = new ExtendedArray(
  [
    'Egypt' => 'Cairo',
    'Japan' => 'Tokyo',
    'France' => 'Paris',
    'Ireland' => 'Dublin'
  ]
);
print($cities->values());
/**
 * {
 *   "0": "Cairo",
 *   "1": "Tokyo",
 *   "2": "Paris",
 *   "3": "Dublin"
 * }
 */