用另一个数组值覆盖数组中的键

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()];
}

简化demo on 3v4l.org

另一种解决方案是使用 array_column 重新索引数组:

$texts = array_column($dbTexts->toArray(), app()->getLocale(), 'name');

简化demo on 3v4l.org