php - 用另一个数组的元素替换数组元素?

时间:2010-05-26 01:14:50

标签: php arrays merge

不确定如何解决这个问题......

但是,我有两个数组,一个有更新的信息,另一个有过时的信息......第二个数组中有更多的元素,但我希望用更新的信息“更新”过时的数据。

这是数组的样子:

//Outdated
Array (
    [0] => Array
        (
            [anum] => 3236468462
            [cid] => 4899097762
            [mid] => 1104881401  
            [na_title] =>         
            [na_fname] => JOHN                   
            [m_initial] =>  
            [na_lname] => DOE           
            [na_suffix] =>     
            [na_addr1] => 1234 SAMPLE AVENUE           
            [na_addr2] =>                             
            [na_city] => NORWALK           
            [state] => OH
            [zip] => 
            [zip_plus_4] => 
            [route] => R002
            [dma_code] => 510334
        )
)


//Updated
Array (
    [1] => Array
        (
            [0] => YUD990
            [1] => 98
            [2] => 1234 Sample Avenue
            [3] => 
            [4] => Norwalk
            [5] => OH
            [6] => 44857-9215
            [7] => 3236468462
        )
)

澄清一点,我想:

(1)将更新后的数组中[7]的值与过时数组中[anum]的值进行匹配,然后更新[na_addr1],[na_addr2],[na_city],[state],[ zip,[zip_plus_4]在过时数组中的值为[2],[3],[4],[5],[6](我知道我需要拆分更新的[6]才能让它映射纠正到过时的)

感觉我这让人很困惑......对不起......

2 个答案:

答案 0 :(得分:2)

您更新的数组需要具有匹配的键,否则无法知道值应如何替换旧值。然后标准数组合并工作。

$new = array_merge($outdated, $updated);

答案 1 :(得分:1)

假设更新数组的结构永远不会改变,您可以使用下面的代码。 (我假设'zip'是前5位数字,zip_plus_4是最后4位数字,但我不清楚它们到底应该是什么。)

$old_array['anum'] = $new_array[7];
$old_array['na_addr1'] = $new_array[2];
$old_array['na_addr2'] = $new_array[2];
$old_array['na_city'] = $new_array[3];
$old_array['state'] = $new_array[4];
$zip_code = explode('-', $new_array[6]);
$old_array['zip'] = $zip_code[0];
$old_array['zip_plus_4'] = $zip_code[1];

我不确定为什么第二个数组不使用自己的一组匹配键。它更具可读性,有助于保持一致性。例如,如果你最后添加另一个字段,一些元素可能会被一个偏移,这只会引起麻烦。但是如果数组使用相同的键,你可以使用下面的代码,一切都会好的。

$old_array['anum'] = $new_array['anum'];
$old_array['na_addr1'] = $new_array['na_addr1'];
(etc)