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。
给出以下 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。