Страницы

Поиск по вопросам

пятница, 12 июля 2019 г.

Объединение двух массивов корректировкой данных

Здравствуйте! Имеется два массива одинаковые по структуре. Нужно из более нового массива перенести данные с корректировкой в более старую,т.е. Если у пользователя Admin был 1$ в старом массиве и 5$ в новом, то в конечном массиве будет 1+5=6$. Но нужно еще делать проверку, если данные не изменились у пользователя, то тогда не производить суммирование + если в старом массиве нету пользователя из нового, то добавить все данные о нем. Вопрос заключается в том, как сделать это? //Старый массив $array1 = array( array('name' => 'admin1','money' => '1'), array('name' => 'admin2','money' => '2'), array('name' => 'admin3','money' => '3'), array('name' => 'admin4','money' => '4'), array('name' => 'admin5','money' => '5')
); //Новый массив $array2 = array( array('name' => 'admin1','money' => '6'), array('name' => 'admin2','money' => '7'), array('name' => 'admin3','money' => '8'), array('name' => 'admin4','money' => '9'), array('name' => 'admin5','money' => '10')
); //Итоговый массив $array2 = array( array('name' => 'admin1','money' => '7'), array('name' => 'admin2','money' => '9'), array('name' => 'admin3','money' => '11'), array('name' => 'admin4','money' => '13'), array('name' => 'admin5','money' => '15')
);


Ответ

Вы ж сами уже расписали что нужно делать. Проходимся по первому массиву, ищем данные каждого текущего элемента по ключу 'name' во втором массиве. Нашли - в результат записываем или неизменённые данные, или новые. Из второго массива обработанный элемент удаляем (или помечаем как обработанный, если массив нужно сохранить). Не нашли - добавляем в результат текущий элемент из первого массива. В конце добавляем в результат всё, что осталось во втором массиве. $rc = array(); // сюда пишем результат $added = array(); // здесь храним данные про уже обработанные элементы foreach( $array1 as $haystack ) { $found = 0; foreach( $array2 as $needle ) { if( isset($added[$needle['name']]) ) continue; // этот уже добавили, дальше
if( $needle['name'] == $haystack['name'] ) { if( $needle['money'] != $haystack['money'] ) $needle['money'] += $haystack['money']; $rc[] = $needle; $added[$needle['name']] = 1; $found = 1; break; } } // не нашли во втором массиве - добавляем исходный элемент первого if( !$found ) $rc[] = $haystack; }
// и добиваем остаток второго массива foreach( $array2 as $needle ) { if( !isset($added[$needle['name']]) ) $rc[] = $needle; }

Комментариев нет:

Отправить комментарий