Здравствуйте! Имеется два массива одинаковые по структуре. Нужно из более нового массива перенести данные с корректировкой в более старую,т.е. Если у пользователя 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;
}
Комментариев нет:
Отправить комментарий