我正在使用codeigniter,我有一个从db返回的关联数组,如下所示:
$result = ['name'=>'john', 'author'=>'smith', 'year'=>2011 ];
以及保存为数组的键的一长串翻译标题列表:
$lang = ['name'=>'名字', 'author'=>'作者', 'year'=>'年份', ... ];
我想将$ result的键与$ lang进行比较,如果在$ result中使用了键,则获取其翻译的标题。最后,构建一个包含所有三个英文标题,翻译标题和值的数组:
$lang_result = ['name' =>['名字', 'john'],
'author' =>['作者', 'smith'],
'year' =>['年份', 2011] ]
$data['result'] = $lang_result;
我正在存储这种格式,因为一旦我将这些数据传递到视图中,我希望能够按名称调用每个数据
echo "{$result['name'][0]}: {$result['name'][1]} "; // 名字: john
echo "{$result['author'][0]}: {$result['author'][1]} ";
到目前为止,我只能通过使用foreach实现这一点 - >切换声明
$lang_result = [];
foreach ($result as $key=>$value ) {
switch ($key){
case 'name':
array_push ($lang_result, [ $key => ['名字', $value] ]);
break;
case 'author':
array_push ($lang_result, [ $key => ['作者', $value] ]);
break;
}
}
但是随着翻译后的数组变得越来越长,switch语句将失控。什么是更好的简化方法?
答案 0 :(得分:2)
正如Dan所说array_merge_recursive
可能是你想要的。如果你需要在这里实现其他逻辑,它将被展开:
$result = ['name'=>'john', 'author'=>'smith', 'year'=>2011];
$lang = ['name'=>'名字', 'author'=>'作者', 'year'=>'年份'];
$lang_result = [];
foreach ($result as $key=>$value) {
if (array_key_exists($key, $lang)) {
$lang_result[$key] = [$lang[$key], $value];
}
}
// these are the same (for now)
print_r($lang_result);
print_r(array_merge_recursive($lang, $result));
答案 1 :(得分:1)
尝试使用array_merge_recursive
$newArray = array_merge_recursive($result, $lang);
答案 2 :(得分:1)
您需要将所需的密钥存储到数组中,然后执行此操作。
$lang_result = array();
$result = ['name'=>'john', 'author'=>'smith', 'year'=>2011 ];
$lang = ['name'=>'名字', 'author'=>'作者', 'year'=>'年份'];
$keys = array('name','author','year');
foreach($keys AS $key){
if(isset($result[$key]) && isset($lang[$key])){
$lang_result[$key] = array($result[$key],$lang[$key]);
}
}