rkr/php-array-utils

数组函数库

0.0.1 2014-07-24 12:26 UTC

This package is auto-updated.

Last update: 2024-08-29 04:00:18 UTC


README

数组函数库

$input = ['a' => 0, 'b' => 1, 'c' => 2, 'd' => 3];

arr\join($input);
# 0123

arr\join($input, ', ');
# 0, 1, 2, 3

arr\intersect($input, [1, 3]);
# [b => 1, d => 3]

arr\intersect\keys($input, ['a', 'b']);
# [a => 0, b => 1]

arr\diff($input, [1, 2]);
# [a => 0, d => 3]

arr\diff\keys($input, ['a', 'c']);
# [b => 1, d => 3]

arr\filter($input);
# [b => 1, c => 2, d => 3]

arr\filter($input, function ($val) { return $val !== 1; });
# [a => 0, c => 2, d => 3]

arr\filter\keys($input);
# [a => 0, b => 1, c => 2, d => 3]

arr\filter\keys($input, function ($key) { return $key !== 'b'; });
# [a => 0, c => 2, d => 3]

arr\filter\keysAndValues($input, function ($key, $value) { return $value === 0 || $key === 'b'; });
# [a => 0, b => 1]

arr\map($input, 'exp');
# [a => 1, b => 2.718281828459, c => 7.3890560989307, d => 20.085536923188]

arr\map($input, function ($val) { return $val + 1; });
# [a => 1, b => 2, c => 3, d => 4]

arr\map\keys($input, 'strtoupper');
# [A => 0, B => 1, C => 2, D => 3]

arr\map\keys($input, function ($key) { return dechex(ord($key)); });
# [61 => 0, 62 => 1, 63 => 2, 64 => 3]

arr\map\keysAndValues($input, function (&$key, $value) { list($value, $key) = array($key, $value); return $value; });
# [0 => a, 1 => b, 2 => c, 3 => d]

arr\map\func([[255, 128, 0], [128, 255, 0]], 'vsprintf', array('#%02X%02X%02X'), 1);
# [0 => #FF8000, 1 => #80FF00]

常见问题解答

嘿,所有酷炫的孩子都在使用面向对象编程。这个库的方向不是在错误的方向吗?

这取决于具体情况或数组使用的程度。在PHP中,数组在不同的场景中经常被用作不同的东西。至少,$_变量是数组。你可以立即将数组包装成ArrayObject,但这样就不能直接使用PHP中内置的许多功能。所以我认为我必须解释每种方法的优缺点。

数组函数的优势

  • 你不需要将每个数组都变成对象来应用特定的功能。
  • 你仍然可以像使用array_merge()这样的内置PHP函数一样在数组上使用,而不需要进行转换。
  • 你可以添加尽可能多的函数。你也可以用ArrayObject的子类来做同样的事情,但最终你将得到一个拥有数十甚至数百个方法的上帝对象(Closure-bindung?)。
  • 你可以始终使用数组类型提示,同时直接利用这个库的扩展。

数组函数的缺点

  • 每次你将数组作为参数传递给一个函数/方法时,整个数组都会被复制。
  • 你可以利用内部状态来帮助跟踪变化或其他信息。