【问题标题】:Laravel Collection. Map one keys to otherLaravel 集合。将一个键映射到另一个
【发布时间】:2020-12-09 07:23:53
【问题描述】:

我想将 Laravel 集合中的一些键映射到其他存储在数组中的键。

我无法为这样的转变“发明”一个适当的简洁和简短的管道。

这是我想要的一个简化示例:

$mappedKeys = [
    '1' => 'One',
    '2' => 'Two',
    '3' => 'Three',
    '4' => 'Four',
];

$data = collect([
    '1' => 'I',
    '2' => 'II',
    '3' => 'III',
    '5' => 'V',
]);

$resultCollection = $data->...

/*
 * I want to receive after some manipulations
 *
 * [
 *      'One'   => 'I',
 *      'Two'   => 'II',
 *      'Three' => 'III',
 *      '5'     => 'V',
 * ]
 */

【问题讨论】:

    标签: php laravel laravel-5 laravel-collection


    【解决方案1】:

    您始终可以在集合上使用combine() 方法:

    $mappedKeys = [
        '1' => 'One',
        '2' => 'Two',
        '3' => 'Three',
        '4' => 'Four',
    ];
    
    $data = collect([
        '1' => 'I',
        '2' => 'II',
        '3' => 'III',
        '5' => 'V',
    ]);
    
    $resultCollection = $data->keyBy(function ($item, $key) use ($mappedKeys) {
        return isset($mappedKeys[$key]) ? $mappedKeys[$key] : $key;
    });
    

    【讨论】:

    • 谢谢,但看起来我过于简单化了。我有一个关联数组,而不是一个简单的数组。我更新了一个例子。你能帮我解决这个问题吗?
    • 谢谢)我之前没有使用过 keyBy,你的解决方案很简洁)。
    【解决方案2】:

    更新答案

    $resultCollection = $data->combine($mappedKeys);
    

    【讨论】:

    • 谢谢。我已经更新了答案,所以你的解决方案已经过时了,但它在一开始是正确的。如果您更新它,我已准备好添加 +1 :)
    • 抱歉,您的解决方案不起作用。我试过了。我以为你会用 php 重写你的解决方案,所以它可能对其他不使用集合但有类似问题的人有所帮助。
    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 2017-07-18
    • 2016-12-21
    • 1970-01-01
    相关资源
    最近更新 更多