dormilich / extended-array-object
将数组函数引入 ArrayObject
v1.5.0
2016-01-13 16:12 UTC
Requires
- php: >=5.4.0
Requires (Dev)
- phpunit/phpunit: 4.*
README
将 PHP 的数组函数引入到 PHP 对象中。
本项目的目的是扩展原生的 ArrayObject
以提供更多数组函数,并提供一个简单的方式来应用后续的数组操作(如过滤、映射、差集、交集)。
目前重点关注单维数组的处理。递归函数可能包含在其他项目中。
函数概览
以下函数被支持
具有相同行为和语法的函数
array_change_key_case()
作为changeKeyCase()
in_array()
作为contains()
array_count_values()
作为countValues()
array_filter()
作为filter()
array_flip()
作为flip()
implode()
作为join()
array_keys()
作为keys()
array_pop()
作为pop()
array_push()
作为push()
array_reverse()
作为reverse()
array_search()
作为search()
array_shift()
作为shift()
shuffle()
array_slice()
作为slice()
array_splice()
作为splice()
array_unique()
作为unique()
array_unshift()
作为unshift()
array_values()
作为values()
一些方法已被重命名以更好地描述其功能
array_merge()
作为concat()
array_replace()
作为merge()
行为或语法略有修改的函数
array_map()
作为map()
,它不接受多个数组。相反,它总是将键和值传递给回调。array_rand()
作为rand()
,它返回数组元素,而不仅仅是键。array_reduce()
作为reduce()
,如果没有提供初始值,则使用第一个数组元素作为初始值。*sort()
,扩展了本地排序方法(ksort/asort),以返回对象实例。array_walk()
作为walk()
,如果没有提供用户数据,则将数组本身注入为用户数据。
行为或语法有重大变化的函数
array_diff_*()
作为diff()
、kdiff()
和adiff()
array_intersect_*()
作为intersect()
、kintersect()
和aintersect()
replace()
是一个新函数,它的工作方式类似于array_replace()
,但不会附加多余的数据。
改进的错误处理
所有方法在遇到错误时都会抛出异常。这有效地允许方法链式调用。
示例
- 在 POST 变量中过滤重复数据
use Dormilich\Core\ArrayObject; try { $duplicates = ArrayObject::from($_POST['group']) ->map(function ($item) { return $item['name']; }) ->countValues() ->filter(function ($count) { return $count > 1; }) ->map(function ($count, $name) { return sprintf('%d× %s', $count, $name); }) ; if (count($duplicates)) { $error_string = 'Duplicate names: ' . $duplicates->join(', '); } } catch (Exception $exc) { error_log($exc->getMessage()); }