给出以下集合/数组:
[
"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是我检索的密钥的原始名称。
答案 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运行。