2014-06-30 111 views
0

的值我有一个数组混合多维数组

array (
    array (
     'id_product' => '10', 
     'id_supplier' => '0' 
    ), 
    array (
     'id_product' => '11', 
     'id_supplier' => '0' 
    ) 
) 

,第二个我想第一个

array (
    array (
     'id_product' => '10', 
     'date' => '12/02/2014' 
    ) 
) 

我需要得到

array (
    array (
     'id_product' => '10', 
     'id_supplier' => '0', 
     'date' => '12/02/2014' 
    ), 
    array (
     'id_product' => '11', 
     'id_supplier' => '0' 
    ) 
) 

我知道合并我可以在一个中使用foreach并在第二个中查找现有值,但最有效的方法是什么?有这种混合的PHP功能吗?我看着array_merge(),但似乎并不什么,我需要

+1

'foreach'会做得很好。不,现在没有现成的功能。 – deceze

+0

如果'id_product'的值在关键字中,则会有更多选项。 –

+0

我同意但不能改变 – Axi

回答

1

继deceze评论,我最终使用:

foreach ($array1 as $key => $value1) { 
    foreach ($array2 as $key2 => $value2) 
     if ($value1['id_product'] == $value2['id_product']) 
     { 
      $array1[$key] = array_merge($array1[$key], $array2[$key2]); 
     } 
} 

这个功能给了我同样的结果,由于TBI,但只有当我需要基于$ a和$ b中的位置进行合并数组,巫婆是不是这样

$result = array_replace_recursive(array1, array2) 
0

下面是完整的工作代码: -

$a = array (
    array (
     'id_product' => '10', 
     'id_supplier' => '0' 
    ), 
    array (
     'id_product' => '11', 
     'id_supplier' => '0' 
    ) 
); 

$b = array (
    array (
     'id_product' => '10', 
     'date' => '12/02/2014' 
    ) 
); 
function my_array_merge(&$array1, &$array2) { 
    $result = Array(); 
    foreach($array1 as $key => &$value) { 
     $a++; 
     echo $a; 
     if(!empty($array2[$key]) && !empty($array2[$key])){ 
      $result[$key] = array_merge($value, $array2[$key]); 
     } 
     if(empty($array2[$key])){ 
      $result[$key] = $value; 
     } 
    } 
    return $result; 
} 
$array = my_array_merge($a, $b); 

echo "<pre>"; 
print_r($array); 
0

试试这个 -

$a = array (
array (
    'id_product' => '10', 
    'id_supplier' => '0' 
), 
array (
    'id_product' => '11', 
    'id_supplier' => '0' 
)); 

$b = array (
array (
    'id_product' => '10', 
    'date' => '12/02/2014' 
)); 

我已经使用array_merge_recursive函数来获取组合阵列: -

$c = array_replace_recursive($a, $b); 

$ C是你想显示的结果。

+1

让我们暂时假设'$ b [0] ['id_product']'实际上是''11 “';在这种情况下,你的代码不起作用。 –

+0

似乎是最简单的解决方案,并且完全符合我的需求,谢谢 – Axi

+1

@Axi这种情况正常,因为要合并的两个数组都是列表中的第一个。如果这是你的逻辑,如果你想在'$ a'和'$ b'内基于*位置*合并数组,那么太棒了!但是如果你想基于'id_product'键合并,那不是。 – deceze