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()); }