dakujem/remapkeys

重新映射数组键。

1.0.1 2022-10-18 18:27 UTC

This package is auto-updated.

Last update: 2024-09-02 15:36:52 UTC


README

Tests Coverage Status

💿 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_keysItera::mapItera::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 核心中在映射时使用索引的常见操作的空白。
看似简单的任务,但在实现时却有其注意事项。