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

时间:2017-05-24 09:42:25

标签: php arrays laravel laravel-collection

给出以下集合/数组:

[
    "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"]

]

其中key-name是我检索的密钥的原始名称。

2 个答案:

答案 0 :(得分:1)

您可以使用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
    ];
});

答案 1 :(得分:1)

您可以执行以下操作来转换所选的键。这将使用未更改的键保留其他值。

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运行。