2017-01-18 6 views
1

У меня есть два массива:объединить две ассоциативные массивы, имеющие одинаковый ключ

$arr1 = array("123" => "abc"); 

$arr2 = array("123" => "xyz", "456" => "lmn"); 

хочу результирующая массив быть:

$arr = array("123" => "abc,xyz", "456" => "lmn");

Я знаю, что могу написать код для извлечения значений соответствующие клавишам, а затем concat с разделителем типа ';' или ',', но я хочу знать, есть ли эффективный способ сделать это? Возможно встроенная функция?

Заранее благодарен!

+0

Могу ли я знать, если это правильный массив? – Thamilan

+0

Да, это допустимый массив – Anusha

+1

array_merge_recursive ($ arr1, $ arr2); // попробуйте это –

ответ

1

Простой foreach будет делать! Проверьте встроенные комментарии

$arr1 = ["123" => "abc"]; 

$arr2 = ["123" => "xyz", "456" => "lmn"]; 

foreach ($arr2 as $key => $value) { 
    if(array_key_exists($key, $arr1)) // Check if key exists in array 
     $arr1[$key] .= ",$value";  // If so, append 
    else 
     $arr1[$key] = $value;   // otherwise, add 
} 

print_r($arr1); 

Печатает

Array 
(
    [123] => abc,xyz 
    [456] => lmn 
) 

Проверить это Eval

+0

Спасибо! но я искал нечто вроде array_merge(), так что мне не нужно писать этот дополнительный код. – Anusha

2

попробовать это:

$arr1 = array("123" => "abc"); 

$arr2 = array("123" => "xyz", "456" => "lmn"); 

$o = []; 
foreach($arr1 as $k => $v) 
{ 
    $o[$k][] = $v; 
} 
foreach($arr2 as $k => $v) 
{ 
    $o[$k][] = $v; 
} 
$result = array_map(function($v){implode(',', array_unique($v));}, $o); 
Смежные вопросы