dormilich/extended-array-object

将数组函数引入 ArrayObject

v1.5.0 2016-01-13 16:12 UTC

This package is auto-updated.

Last update: 2024-09-21 23:24:53 UTC


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