Laravel/PHP 在不知道名称的情况下重命名关联键

Laravel/PHP renaming associative keys without knowing their names

给出以下 collection/array:

[
    "somename" => "test.test.be"
    "anothername" => "test"
    "yetanothername" => "testing"
    "extrafield" => "extra",
    "extrafield" => "extra",

]

当我检索这个集合时,我总是知道它们的顺序,但我不知道键名。所以我想做的是转换这个集合并将键名更改为我定义的值。

对于非关联数组,我会做类似

的事情
    $trimmedCollection->transform(function ($item) {
        return [
            'email'               => $item[0],
            'first_name'          => $item[1],
            'surname'             => $item[2],
        ];
    });

但是对于给定的集合我该如何处理呢?还有如何处理溢出的项目。假设我突然得到 10 个键值对,但只写了 3 个的转换,我如何将所有溢出转换为默认键?

编辑: 对于溢出项,我想分配给定数组中的所有额外字段,以便像这样存储。

下面是最终数组:

[
    "email" => "test.test.be"
    "first_name" => "test"
    "surname" => "testing"
    "additional_fields" => ["key-name" => "extra","key-name" => "extra"]

]

其中键名是我检索到的键的原始名称。

您可以使用 array_shift 删除数组中每个已知元素的第一个元素,并将剩余的数组添加到您的 additional_fields 键:

$trimmedCollection->transform(function ($item) {

    return [
        'email'               => array_shift($item), //$item[0]
        'first_name'          => array_shift($item), //$item[1]
        'surname'             => array_shift($item), //$item[2]
        'additional_fields'   => $item //all remaining items
    ];
});

您可以执行类似的操作来转换您选择的键。这将保留其他值及其未更改的键。

function replace_array_key(array &$item, $oldKey, $newKey)
{
    $item[$newKey] = $item[$oldKey];
    unset($item[$oldKey]);
}

$trimmedCollection->transform(function ($item) {
    replace_array_key($item, 'somename', 'email');
    replace_array_key($item, 'anothername', 'first_name');
    replace_array_key($item, 'yetanothername', 'surname');

    return $item;
});

您甚至可以将其扩展为包含新旧键名的数组列表,并 运行 通过 arrap_map。