不确定如何解决这个问题......
但是,我有两个数组,一个有更新的信息,另一个有过时的信息......第二个数组中有更多的元素,但我希望用更新的信息“更新”过时的数据。
这是数组的样子:
//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]才能让它映射纠正到过时的)
感觉我这让人很困惑......对不起......
答案 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)