dakujem / remapkeys
重新映射数组键。
1.0.1
2022-10-18 18:27 UTC
Requires
- php: >=7.2
Requires (Dev)
- phpunit/phpunit: ^8 || ^9.1
README
💿
composer require dakujem/remapkeys
此包添加了一对类似于 array_map
的函数,这些函数在处理数组时经常使用
array_remap
- 类似于
array_map
,但允许指定/映射结果的索引
- 类似于
array_map_keys
- 类似于
array_map
,但将索引传递给迭代器函数,并在结果中保留索引
- 类似于
托鲁(替代方案)
此包提供的这两个函数都可以用托鲁取用 (dakujem/toru
) 提供的实用工具替代,它还提供了处理通用 iterable
类型的工具。
可以替换 array_remap
为更宽松的 Itera::unfold
// Original `array_remap` function call: array_remap($function, $input); // Replaced by `Itera` class method call: Itera::unfold($input, $function);
优点
- 也能将一个值映射到多个值上
- 允许在映射器中包含分支逻辑(
if
) - 可能更节省内存,特别是对于大数组
可以替换 array_map_keys
为 Itera::map
或 Itera::apply
,因为 Toru 中的所有可调用项都会接收到键和值
// Original `array_map_keys` function call: array_map_keys($function, $input); // Replaced by `Itera` class method call: Itera::map($input, $function);
优点
- 可能更节省内存,特别是对于大数组
array_remap
允许使用映射函数重新映射数组的索引和值。
$input = [ 'foo' => 'bar', 'b' => 'Bran', 'unknown' => 'Stark', ]; array_remap(function($val, $index){ return [ strtolower($val) => strlen($index) ]; }, $input); /* result: [ 'bar' => 3, 'bran' => 1, 'stark' => 7, ] */
$input = [ [ 'url' => 'https://www.google.com', 'provider' => 'Google' ], [ 'url' => 'https://www.yahoo.com', 'provider' => 'Yahoo!' ], ]; array_remap(function($val){ return [ $val['url'] => $val['provider'] ]; }, $input); /* result: [ 'https://www.google.com' => 'Google', 'https://www.yahoo.com' => 'Yahoo!', ] */
内部,这是一个映射-归约操作。
更多详情请查看 源代码。
array_map_keys
允许同时处理数组的值及其索引。索引在结果中保留。
$input = [ 'foo' => 'bar', 'boring' => 'Bran', 'strange' => 'Stark', ]; array_map_keys(function($val, $index){ return ucfirst($index) . ' ' . ucfirst($val); }, $input); /* result: [ 'foo' => 'Foo Bar', 'boring' => 'Boring Bran', 'strange' => 'Strange Stark', ] */
请注意,虽然可以原生调用
array_map($values, array_keys($values))
,但该调用不会保留原始键。
更多详情请查看 源代码。
原因
这两个函数填补了 PHP 核心中在映射时使用索引的常见操作的空白。
看似简单的任务,但在实现时却有其注意事项。