合并两个不同长度的关联数组,其中键(datetime)在两个数组中都匹配

时间:2010-08-18 19:40:04

标签: php arrays

我有2个数组,每个数组都有一个日期字符串和一个表示'amount'的字符串值。第一个数组在start_date和end_date之间每天都有一行,但是'amount'没有任何内容。第二个数组的行数较少,但数量较少。我需要合并2个数组,这样我每天最后会得到一行,如果有的话,那就是当天的数量。

阵列1:每天,没有金额:

Array(  
    [20040601] => Array( [amount] => )  
    [20040602] => Array( [amount] => )  
    ...   
    [20100506] => Array( [amount] => )  
    [20100507] => Array( [amount] => )  
)  

数组2:每行的唯一日期,有金额,而不是每天的条目:

Array(  
    [20040618] => Array( [amount] => 19764 )  
    [20040727] => Array( [amount] => 18008 )  
    ...  
    [20040925] => Array( [amount] => 5480 )  
    [20041007] => Array( [amount] => 12522 )  
)  

结果:

Array(  
    [20040618] => Array( [amount] => 19764 )  
    [20040619] => Array( [amount] => )  
    [20040620] => Array( [amount] => 5967)  
    [20040621] => Array( [amount] => )  
    ...
    [20040625] => Array( [amount] => 5480 )  
    [20040626] => Array( [amount] => 12522 )  
    [20040627] => Array( [amount] => 4523 )  
)  

编辑:显示结果数组好一点。

结果数组每天会包含一行,如果有,则包含当天的相应数量。所以基本上,合并日期键并返回日期和金额。我试图让merge_array工作,但我在这个过程中失去了约会。必须有一个本机函数来执行此操作,而无需通过迭代循环遍历数组。

2 个答案:

答案 0 :(得分:1)

array_merge_recursive($array1, $array2);

答案 1 :(得分:1)

  

我试图让merge_array工作   但我失去了约会   过程

这是由日期字符串转换为数字类型引起的,这会导致array_merge()行为不同。如果您使用PHP不会转换为数字的字符串键,它应该执行您想要的操作:

$arr1 = array(
    '2004-06-01' => array('amount' => null),
    '2004-06-02' => array('amount' => null),
    '2010-05-06' => array('amount' => null),
    '2010-05-07' => array('amount' => null),
);

$arr2 = array(
    '2004-06-01' => array('amount' => 50),
    '2004-06-02' => array('amount' => 100),
    '2010-05-08' => array('amount' => 200),
    '2010-05-07' => array('amount' => 250),
);

print_r(array_merge($arr1, $arr2));