php - заменить элементы массива элементами другого массива? - PullRequest
1 голос
/ 26 мая 2010

Не уверен, как это сделать ...

Но у меня есть два массива, один с обновленной информацией, другой с устаревшей информацией ... Во втором массиве намного больше элементов, но я хочу "обновить" устаревший с обновленной информацией.

Вот как выглядят массивы:

//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 ]

2 голосов
/ 26 мая 2010

Ваш обновленный массив должен иметь совпадающие ключи, иначе нет способа узнать, как значения должны заменить старые. Тогда слияние стандартного массива работает.

$new = array_merge($outdated, $updated);
1 голос
/ 26 мая 2010

Предполагая, что структура массива обновлений никогда не изменится, вы можете просто использовать приведенный ниже код. (Я предполагаю, что «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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...