breier / extended-array
一个扩展PHP-SPL ArrayIterator并实现从PHP普通数组处理中获取大量功能的类
2.1.0
2020-05-03 16:13 UTC
Requires
- php: ^7.3
- ext-json: *
- ext-pdo: *
Requires (Dev)
- phpunit/phpunit: ^8.5
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" * } */