1

给定以下集合/数组:

[
    "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 是我检索到的密钥的原始名称。

4

2 回答 2

3

您可以使用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
    ];
});
于 2017-05-24T09:45:22.307 回答
2

你可以做这样的事情来转换你选择的键。这将保留其他值及其未更改的键。

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

于 2017-05-24T10:07:03.360 回答