2013-05-22 135 views
1

我有2个阵列PHP加入2个阵列

$array1 = array(
    ['2013-05-01']=>'test', 
    ['2013-05-02']=>'testing', 
    ['2013-05-03']=>'working', 
    ['2013-05-04']=>'future test'); 

$array2 = array(
    ['2013-05-01']=>'1', 
    ['2013-05-02']=>'done', 
    ['2013-05-03']=>'code', 
    ['2013-05-05']=>'release'); 

我要加入这些阵列,使得输出是

$result = array(
     ['2013-05-01']=>'test 1', 
     ['2013-05-02']=>'testing 2', 
     ['2013-05-03']=>'working code', 
     ['2013-05-04']=>'future test', 
     ['2013-05-05']=>'release') 

我试图$结果= $ ARRAY1 +数组2; array_merge(),array_combine()没有给出正确的结果。

你能帮我吗。

+3

你需要编写自己的代码来做到这一点。没有内置函数。 –

+0

你的意思是使用foreach循环? –

+3

让人感到意外的是,人们希望PHP能够为每个单独的场景提供一个内置函数,而一个开始的程序员应该能够毫不费力地解决这个问题。 –

回答

6
foreach($array2 AS $key => $value) 
{ 
    $array1[$key] = isset($array1[$key]) ? $array1[$key] . " " . $value : $value; 
} 
+0

它的工作表示感谢。 –

+0

您可能想在这里添加一些错误处理。 :) – Achrome

+0

错误处理是什么? $ array1不包含$ array2的键的情况被处理。 –

6

下面是这一问题的一个在线解决方案:

$array1 = array(
    '2013-05-01'=>'test', 
    '2013-05-02'=>'testing', 
    '2013-05-03'=>'working', 
    '2013-05-04'=>'future test'); 

$array2 = array(
    '2013-05-01'=>'1', 
    '2013-05-02'=>'done', 
    '2013-05-03'=>'code', 
    '2013-05-05'=>'release'); 


$r = array_map(function($i) { 
    return !is_array($i) ? $i : implode(' ', $i); 
}, array_merge_recursive($array1, $array2)); 

var_dump($r); 

在线演示:http://ideone.com/wmbple

+0

Dammit我花了5分钟在蹩脚的iPad软键上打字,只是为了让一些真正的键盘玩家打败我。 –

+0

@Niels Keurentjes:“只是为了让一些真正的键盘玩家揍我一拳”---“懒鬼”?这是一个笑话吗? – zerkms

+0

@NielsKeurentjes对于有人在iPad上输入答案,这是值得商榷的是谁是懒鬼= p –

1

你可以使用array_walk()

$result = $array1; 
array_walk($result, function(&$value, $key) use (&$array2) { 
    $value .= ' ' . $array2[$key]; 
}); 

Demo

这个修改$result(从$array1复制)就地根据数组键从$array2查找值。

0

这是更好地写出了功能它并把它放在你的工具箱:

function merge_array() { 
    $merged = array(); 
    $arrays = func_get_args(); 

    if ($arrays) { 
     foreach ($arrays as $array) { 
      foreach ($array as $key => $value) { 
       if (isset($merged[$key])) { 
        $merged[$key] .= ' ' . $value; 
       } 
       else { 
        $merged[$key] = $value; 
       } 
      } 
     } 
    } 

    return $merged; 
} 

现在通过$array1$array2它:

$result = merge_array($array1, $array2); 

,你会得到这样的结果:

// Array 
// (
//  [2013-05-01] => test 1 
//  [2013-05-02] => testing done 
//  [2013-05-03] => working code 
//  [2013-05-04] => future test 
//  [2013-05-05] => release 
//) 

请注意,如果您想要,此功能可以接受两个以上的阵列。

0

array_walk()将是最简单的方法。