用另一个数组值覆盖数组中的键
Overwrite keys from array by another arrays values
我有两个数组。数组 "texts" 和数组 "dbTexts"。在 "dbTexts" 中,某个类别的所有文本都在我的数据库中。
一条记录看起来像这样:
0 => {
id: 1
de: "German text"
en: "English text"
name: "question"
},
1 => {
id: 2
de: "German text"
en: "English text"
name: "error"
},
2 => {
id: 3
de: "German text"
en: "English text"
name: "success"
},
现在我想操作 $texts 数组并为 $dbTexts 数组的每个元素添加一个 key/value。
我希望 $texts 的键是 $dbTexts 的 "name" 键,值应该是 "de" 键或 "en" 键。
我尝试过的:
$texts = array_map(function ($key) {
return $texts[$key['name']] = $key[app()->getLocale()];
},$dbTexts->toArray());
app()->getLocale()
自动 returns "de" 或 "en"。
所以 $key 将是 $dbTexts 的每个元素。
$texts[$key['name']]
应该 return 'question' 在第一个示例记录中,$key[app()->getLocale()]
应该 return 每个元素的 de/en 值。
我想要的输出是:
$texts = [
'question' => 'German text',
'error' => 'German text',
'success' => 'German text',
]
整个 de/en 对这个问题来说并不重要。我更想创建 $texts 变量,它将每个 $dbText 的 "name" 作为键和当前 $dbText 中 de/en 的关联值。
这是最容易通过简单的 foreach
循环实现的:
foreach ($dbTexts->toArray() as $text) {
$texts[$text['name']] = $text[app()->getLocale()];
}
另一种解决方案是使用 array_column
重新索引数组:
$texts = array_column($dbTexts->toArray(), app()->getLocale(), 'name');
我有两个数组。数组 "texts" 和数组 "dbTexts"。在 "dbTexts" 中,某个类别的所有文本都在我的数据库中。
一条记录看起来像这样:
0 => {
id: 1
de: "German text"
en: "English text"
name: "question"
},
1 => {
id: 2
de: "German text"
en: "English text"
name: "error"
},
2 => {
id: 3
de: "German text"
en: "English text"
name: "success"
},
现在我想操作 $texts 数组并为 $dbTexts 数组的每个元素添加一个 key/value。
我希望 $texts 的键是 $dbTexts 的 "name" 键,值应该是 "de" 键或 "en" 键。
我尝试过的:
$texts = array_map(function ($key) {
return $texts[$key['name']] = $key[app()->getLocale()];
},$dbTexts->toArray());
app()->getLocale()
自动 returns "de" 或 "en"。
所以 $key 将是 $dbTexts 的每个元素。
$texts[$key['name']]
应该 return 'question' 在第一个示例记录中,$key[app()->getLocale()]
应该 return 每个元素的 de/en 值。
我想要的输出是:
$texts = [
'question' => 'German text',
'error' => 'German text',
'success' => 'German text',
]
整个 de/en 对这个问题来说并不重要。我更想创建 $texts 变量,它将每个 $dbText 的 "name" 作为键和当前 $dbText 中 de/en 的关联值。
这是最容易通过简单的 foreach
循环实现的:
foreach ($dbTexts->toArray() as $text) {
$texts[$text['name']] = $text[app()->getLocale()];
}
另一种解决方案是使用 array_column
重新索引数组:
$texts = array_column($dbTexts->toArray(), app()->getLocale(), 'name');