greeny / array-class
数组的目标方法
1.0.0
2015-12-02 23:18 UTC
This package is auto-updated.
Last update: 2024-09-19 05:48:42 UTC
README
数组的目标方法
目标
你有没有使用过PHP的某些原生array_*
函数?那么你知道它们存在一些不一致性,其中一些只返回新数组,而另一些则修改原始数组。甚至不提参数顺序和默认值。
让我们看看这段代码
$array = []; array_push($array, 0, 1, 2, 3); shuffle($array); $array = array_map(function ($item) { return $item * 2; }, $array); $array = array_filter($array); print_r($array);
你能从第一眼看出这段代码的功能吗?嗯,你可能可以,但代码很混乱。
但是,如果我们像这样重写代码
$array = ArrayClass::from([]) ->push(0, 1, 2, 3) ->shuffle() ->map(function ($item) { return $item * 2; }) ->filter() ->toArray(); print_r($array);
看起来好多了,对吧?而且,猜猜看,它和上面的例子做的是同样的事情,使用相同的函数,但利用了PHP 5的面向对象编程;PHP 5.6的可变参数和其他一些功能。
有人可能会争辩说,使用这个类工作不会像使用数组那样,但我也有解决办法!
$array = ArrayClass::from([]); // you can count elements natively count($array); // iterate over elements foreach ($array as $key => $value) { // do stuff } // and even modify some of them! $array[1] = 4; $array[2] = $array[3] * isset($array[4]) ? $array[4] : 4; unset($array[5]);
所以你以为这就是我能给你的所有东西吗?错了!看看所有这些内置的酷炫特性
- 更严格的代码(每个比较都是通过
===
而不是==
完成的,这也适用于in_array
、search
和keys
) - 更大的数组支持:每个与普通数组一起工作的方法也可以接受
ArrayClass
或实现Traversable
的对象 - 使用
$arrayClass->cloneArray()
返回新的克隆或使用$arrayClass->cloneRef($original)
保存原始对象并返回克隆 - 自动回调检查,当传入的回调不可调用时抛出异常
- 简洁且易于阅读的API,具有流畅的接口
- 使用
toArray()
方法转换为普通数组 - 对象访问(
$arrayClass->foo
与$arrayClass['foo']
相同) - 还有很多其他功能!
那么你在等什么呢?
哦,你可能不知道如何初始化这个玩意儿?
好吧,简单地将ArrayClass.php
文件复制到你的工作目录并包含它
require_once __DIR__ . '/ArrayClass.php'; // path to the most awesome library ever
或者使用composer安装它(composer require greeny/array-class
)并使用composer自动加载器
require_once __DIR__ . '/vendor/autoload.php';
然后你就可以开始享受它了!
// import class use greeny\ArrayClass\ArrayClass; // yes, I know, weird namespace $array = new ArrayClass; // initializes from empty array $array = new ArrayClass($original); // initializes from original array $array = ArrayClass::from($original); // same as before, good for chaining methods immidiatelly, like below: $array = ArrayClass::from($original)->filter()->shuffle(); // etc etc
即将推出(可能)
- 单元测试(可能存在一些尚未发现的错误)
- 有什么想法?请通过创建问题来告诉我!
方法索引
几乎所有的ArrayClass
提供的方法都只是封装了一些原生PHP函数来处理数组。如果这样做,只包括封装的PHP函数的名称,参数与原始函数相同(除了第一个数组参数,它表示你正在处理的数组,由ArrayClass
表示)。
changeKeyCase
($case
)=array_change_key_case
chunk
($size, $preserveKeys = FALSE
)=array_chunk
column
($key, $indexKey = NULL
)=array_column
countValues
=array_count_values
diffAssoc
(...$array
)=array_diff_assoc
diffKey
(...$array
)=array_diff_key
diffUassoc
($callback, ...$array
)=array_diff_uassoc
diff
(...$array
)=array_diff
filter
($callback = NULL, $flags = 0
)=array_filter
flip
=array_flip
intersectAssoc
(...$array
)=array_intersect_assoc
intersectKey
(...$array
)=array_intersect_key
intersectUassoc
($callback, ...$array
)=array_intersect_uassoc
intersectUkey
($callback, ...$array
) =array_intersect_ukey
intersect
(...$array
) =array_intersect
keyExists
($key
) =array_key_exists
keys
($search = NULL, $strict = TRUE
) =array_keys
map
($callback, ...$array
) =array_map
mergeRecursive
(...$array
) =array_merge_recursive
merge
(...$array
) =array_merge
multisort
($order = SORT_ASC, $flags = SORT_REGULAR, ...$args
) =array_multisort
pad
($size, $value
) =array_pad
pop
=array_pop
product
=array_product
push
(...$values
) =array_push
rand
($num = 1
) =array_rand
reduce
($callback, $initial = NULL
) =array_reduce
replaceRecursive
(...$array
) =array_replace_recursive
replace
(...$array
) =array_replace
reverse
($preserveKeys = FALSE
) =array_reverse
search
($needle, $strict = TRUE
) =array_search
shift
=array_shift
slice
($offset, $length = NULL, $preserveKeys = FALSE
) =array_slice
splice
($offset, $length = 0, $replacement = []
) =array_splice
sum
=array_sum
udiffAssoc
($callable, ...$array
) =array_udiff_assoc
udiffUassoc
($valueCallable, $keyCallable, ...$array
) =array_udiff_uassoc
udiff
($callable, ...$array
) =array_udiff
uintersectAssoc
($callable, ...$array
) =array_uintersect_assoc
uintersectUassoc
($valueCallable, $keyCallable, ...$array
) =array_uintersect_uassoc
uintersect
($callable, ...$array
) =array_uintersect
unique
($sort = SORT_STRING
) =array_unique
unshift
(...$value
) =array_unshift
values
=array_values
walkRecursive
($callback, $userData = NULL
) =array_walk_recursive
walk
($callback, $userData = NULL
) =array_walk
arsort
($sort = SORT_REGULAR
) =arsort
asort
($sort = SORT_REGULAR
) =asort
current
=current
each
=each
end
=end
has
($needle, $strict = TRUE
) =in_array
key
=key
krsort
($sort = SORT_REGULAR
) =krsort
ksort
($sort = SORT_REGULAR
) =ksort
natCaseSort
=natcasesort
natSort
=natsort
next
=next
prev
=prev
reset
=reset
rsort
($sort = SORT_REGULAR
) =rsort
shuffle
=shuffle
sort
($sort = SORT_REGULAR
) =sort
uasort
($callable
) =uasort
uksort
($callable
) =uksort
usort
($callable
) =usort
此外,还有一些实用方法
combineKeysWith
($values
) - 等同于调用array_combine($array, $values)
combineValuesWith
($keys
) - 等同于调用array_combine($keys, $array)
cloneArray
- 返回ArrayClass
的克隆cloneRef
(&$ref
) - 返回ArrayClass
的克隆,同时将原始ArrayClass
设置为$ref
toArray
- 将ArrayClass
转换为原生数组getIndex
($index
) - 返回目标索引的值setIndex
($index, $value
) - 在目标索引处设置值issetIndex
($index
) - 判断索引是否已设置unsetIndex
($index
) - 取消索引设置
以及一些以静态方法开始的
ArrayClass::combine
($keys, $values
) - 从array_combine($keys, $values)
的结果创建新的ArrayClass
ArrayClass::fillKeys
($array, $value
) - 从array_fill_keys($array, $value)
的结果创建新的ArrayClass
ArrayClass::fill
($start, $num, $value
) - 从array_fill($start, $num, $value)
的结果创建新的ArrayClass
ArrayClass::range
($start, $end, $step = 1
) - 从range($start, $end, $step)
的结果创建新的ArrayClass