Php 在两个关联数组中查找匹配的键?
我正在使用codeigniter,我从db返回了一个关联数组,如下所示:Php 在两个关联数组中查找匹配的键?,php,arrays,codeigniter,match,associate,Php,Arrays,Codeigniter,Match,Associate,我正在使用codeigniter,我从db返回了一个关联数组,如下所示: $result = ['name'=>'john', 'author'=>'smith', 'year'=>2011 ]; $lang = ['name'=>'名字', 'author'=>'作者', 'year'=>'年份', ... ]; 以及保存为数组的键的翻译标题的长列表,如下所示: $result = ['name'=>'john', 'author'=>'
$result = ['name'=>'john', 'author'=>'smith', 'year'=>2011 ];
$lang = ['name'=>'名字', 'author'=>'作者', 'year'=>'年份', ... ];
以及保存为数组的键的翻译标题的长列表,如下所示:
$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->switch语句来实现这一点
$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语句将不可思议地失去控制。有什么更好的方法可以简化此过程?尝试使用
数组\u合并\u递归
$newArray = array_merge_recursive($result, $lang);
尝试使用
array\u merge\u recursive
$newArray = array_merge_recursive($result, $lang);
您需要将所需的密钥存储到一个数组中,然后像这样做
$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]);
}
}
您需要将所需的密钥存储到一个数组中,然后像这样做
$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]);
}
}
正如Dan提到的,
array\u merge\u 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));
正如Dan提到的,
array\u merge\u 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));
经过一些实验,我发现foreach循环有更多的控制。array\u merge\u recursive将输出两个数组中的所有键,即使有时结果数组只有几个键。经过一些实验,我发现foreach循环有更多的控制。array\u merge\u recursive将输出两个数组中的所有键,即使有时结果数组只有几个键。我是否遗漏了什么?你说过foreach循环有更多的控制权。为什么我没有被选中?我是继丹之后的第二个回答者。新用户得不到积分?我很抱歉,因为我没有15个信誉点,所以我无法对答案进行投票。我是不是遗漏了什么?你说过foreach循环有更多的控制权。为什么我没有被选中?我是继丹之后的第二个回答者。新用户得不到积分?我很抱歉,因为我没有15个信誉点,所以我无法投票。