<?php
/**
* К вопросу http://h...content-available-to-author-only...e.ru/questions/335487
*/
//Старый массив
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') );
//Новый массив
array('name' => 'admin11','money' => '6'), array('name' => 'admin2','money' => '7'), array('name' => 'admin3','money' => '8'), array('name' => 'admin7','money' => '9'), array('name' => 'admin1','money' => '2') );
// можно не сортировать, если известно, что имена идут по возрастанию
usort( $array1, "byName"); usort( $array2, "byName");
// перемотать указатель на первые элементы
while( TRUE) {
$sign = min(1, max(-1, strcmp( $a['name'], $b['name']))); // -1, 0 или 1 switch( $sign) {
case 0:
if( $a['money'] != $b['money'] ) {
$a['money'] += $b['money'];
}
break;
case 1:
break;
case -1:
}
// не подошли ли к концу?
if( $a === FALSE) {
rest_of( $array1, $result);
break;
}
if( $b === FALSE) {
rest_of( $array1, $result);
break;
}
}
// вывод результата
foreach( $result AS $a) printf( "%s: €%s\n", $a['name'], $a['money']);
function byName( $a, $b) { // сортировка по полю name
return strcmp( $a['name'], $b['name']); }
function rest_of( &$arr, &$result){ // дописать остаток массива в $result
while( ($a = next( $arr)) !== FALSE) { }
}
PD9waHAKLyoqCiAqINCaINCy0L7Qv9GA0L7RgdGDIGh0dHA6Ly9oLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5lLnJ1L3F1ZXN0aW9ucy8zMzU0ODcKICovCiAKLy/QodGC0LDRgNGL0Lkg0LzQsNGB0YHQuNCyCiRhcnJheTEgPSBhcnJheSgKCWFycmF5KCduYW1lJyA9PiAnYWRtaW4xJywnbW9uZXknID0+ICcxJyksCglhcnJheSgnbmFtZScgPT4gJ2FkbWluMicsJ21vbmV5JyA9PiAnMicpLAoJYXJyYXkoJ25hbWUnID0+ICdhZG1pbjMnLCdtb25leScgPT4gJzMnKSwKCWFycmF5KCduYW1lJyA9PiAnYWRtaW40JywnbW9uZXknID0+ICc0JyksCglhcnJheSgnbmFtZScgPT4gJ2FkbWluNScsJ21vbmV5JyA9PiAnNScpIAopOwoKLy/QndC+0LLRi9C5INC80LDRgdGB0LjQsgokYXJyYXkyID0gYXJyYXkoCglhcnJheSgnbmFtZScgPT4gJ2FkbWluMTEnLCdtb25leScgPT4gJzYnKSwKCWFycmF5KCduYW1lJyA9PiAnYWRtaW4yJywnbW9uZXknID0+ICc3JyksCglhcnJheSgnbmFtZScgPT4gJ2FkbWluMycsJ21vbmV5JyA9PiAnOCcpLAoJYXJyYXkoJ25hbWUnID0+ICdhZG1pbjcnLCdtb25leScgPT4gJzknKSwKCWFycmF5KCduYW1lJyA9PiAnYWRtaW4xJywnbW9uZXknID0+ICcyJykKKTsKIAovLyDQvNC+0LbQvdC+INC90LUg0YHQvtGA0YLQuNGA0L7QstCw0YLRjCwg0LXRgdC70Lgg0LjQt9Cy0LXRgdGC0L3Qviwg0YfRgtC+INC40LzQtdC90LAg0LjQtNGD0YIg0L/QviDQstC+0LfRgNCw0YHRgtCw0L3QuNGOCnVzb3J0KCAkYXJyYXkxLCAiYnlOYW1lIik7CnVzb3J0KCAkYXJyYXkyLCAiYnlOYW1lIik7CgovLyDQv9C10YDQtdC80L7RgtCw0YLRjCDRg9C60LDQt9Cw0YLQtdC70Ywg0L3QsCDQv9C10YDQstGL0LUg0Y3Qu9C10LzQtdC90YLRiwpyZXNldCggJGFycmF5MSk7CnJlc2V0KCAkYXJyYXkyKTsKCiRyZXN1bHQgPSBhcnJheSgpOwokYSA9IGN1cnJlbnQoICRhcnJheTEpOwokYiA9IGN1cnJlbnQoICRhcnJheTIpOwp3aGlsZSggVFJVRSkgewoJJHNpZ24gPSBtaW4oMSwgbWF4KC0xLCBzdHJjbXAoICRhWyduYW1lJ10sICRiWyduYW1lJ10pKSk7IC8vIC0xLCAwINC40LvQuCAxCglzd2l0Y2goICRzaWduKSB7CgkJY2FzZSAwOgoJCQlpZiggJGFbJ21vbmV5J10gIT0gJGJbJ21vbmV5J10gKSB7CgkJCQkkYVsnbW9uZXknXSArPSAkYlsnbW9uZXknXTsKCQkJfQoJCQlhcnJheV9wdXNoKCAkcmVzdWx0LCAkYSk7CgkJCSRhID0gbmV4dCggJGFycmF5MSk7CgkJCSRiID0gbmV4dCggJGFycmF5Mik7CgkJYnJlYWs7CgkJY2FzZSAxOgoJCQlhcnJheV9wdXNoKCAkcmVzdWx0LCAkYik7CgkJCSRiID0gbmV4dCggJGFycmF5Mik7CgkJYnJlYWs7CgkJY2FzZSAtMToKCQkJYXJyYXlfcHVzaCggJHJlc3VsdCwgJGEpOwoJCQkkYSA9IG5leHQoICRhcnJheTEpOwoJfQoKCS8vINC90LUg0L/QvtC00L7RiNC70Lgg0LvQuCDQuiDQutC+0L3RhtGDPwoJaWYoICRhID09PSBGQUxTRSkgewoJCXJlc3Rfb2YoICRhcnJheTEsICRyZXN1bHQpOwoJCWJyZWFrOwoJfQoJaWYoICRiID09PSBGQUxTRSkgewoJCXJlc3Rfb2YoICRhcnJheTEsICRyZXN1bHQpOwoJCWJyZWFrOwoJfQp9CgovLyDQstGL0LLQvtC0INGA0LXQt9GD0LvRjNGC0LDRgtCwCmZvcmVhY2goICRyZXN1bHQgQVMgJGEpIHByaW50ZiggIiVzOiDigqwlc1xuIiwgJGFbJ25hbWUnXSwgJGFbJ21vbmV5J10pOwoKCmZ1bmN0aW9uIGJ5TmFtZSggJGEsICRiKSB7IC8vINGB0L7RgNGC0LjRgNC+0LLQutCwINC/0L4g0L/QvtC70Y4gbmFtZQoJcmV0dXJuIHN0cmNtcCggJGFbJ25hbWUnXSwgJGJbJ25hbWUnXSk7Cn0KCmZ1bmN0aW9uIHJlc3Rfb2YoICYkYXJyLCAmJHJlc3VsdCl7IC8vINC00L7Qv9C40YHQsNGC0Ywg0L7RgdGC0LDRgtC+0Log0LzQsNGB0YHQuNCy0LAg0LIgJHJlc3VsdAoJd2hpbGUoICgkYSA9IG5leHQoICRhcnIpKSAhPT0gRkFMU0UpIHsKCQlhcnJheV9wdXNoKCAkcmVzdWx0LCAkYSk7Cgl9Cn0=