Сортировка csv файла.

Jovanni

Новичок
PHP:
10445,Google,"United States"
1075,"United Network LLC","Russian Federation"
7099,"Oversun-Mercury Ltd","Russian Federation"
358,"Oversun-Mercury Ltd","Russian Federation"
253,"mail.ru", Netherlands
358,"Oversun-Mercury Ltd","Russian Federation"
730,"MYTECH Mikhail Yakovlev",Norway
126,"mail.ru", Netherlands
126,"mail.ru", Netherlands
730,"MYTECH Mikhail Yakovlev",Norway
727,Mail.Ru,"Russian Federation"
730,"MYTECH Mikhail Yakovlev",Norway
126,"mail.ru", Netherlands
3451,Mail.Ru,"Russian Federation"
нужно суммировать если 2ые и 3ие столбцы совпадают
и отсортировать по убыванию..
Спасибо заранее!!!!


PHP:
$arrayd=dateRange( $fromd, $tod );
foreach ($arrayd as &$tod) {
$fp = fopen ( ''.$ip2name.'.txt', 'w' );
	foreach (glob("$filename/$tod*.bz2") as $bzfile) {
		$fh = bzopen ( "$bzfile", "r" );
		for($i=0; $info = fgetcsv ($fh, 124217728, ","); $i++) {
			list($octets,$source,$dest) = $info;
			$n = $n+1;
		if ($dest == $ip) {
			$geoip2host = geoip_org_by_name($source);
			$country = geoip_country_name_by_name($source);
			$params = array($octets,$geoip2host,$country);
			fputcsv($fp,$params);
		} else {
			$do='2';
		}
	}
        bzclose ( $fh );
    }
    fclose( $fp );
}
 

assous

Новичок
а что именно суммировать?
конструкция не имеет смысла, т.к. переменная $i нигде не используется
PHP:
for($i=0; $info = fgetcsv ($fh, 124217728, ","); $i++)
лучше заменить на while, для большей наглядности
PHP:
while($info = fgetcsv ($fh, 124217728, ","))
ортсортировать можно этой функцией - array_multisort
 

Jovanni

Новичок
Суммирование одинаковых элементов то есть при совпадении 2 ого и 3 ого массива суммировать 1 ый . И отсортировать по убыванию 1 ого массива.То есть должен прийти к такому виду
PHP:
10445,Google,"United States"
7816,"Oversun-Mercury Ltd","Russian Federation"
4178,Mail.Ru,"Russian Federation"
2190,"MYTECH Mikhail Yakovlev",Norway
1075,"United Network LLC","Russian Federation"
631,"mail.ru", Netherlands
 

radioheaded

PHP нуб
Суммирование одинаковых элементов то есть при совпадении 2 ого и 3 ого массива суммировать 1 ый . И отсортировать по убыванию 1 ого массива.То есть должен прийти к такому виду
PHP:
10445,Google,"United States"
7816,"Oversun-Mercury Ltd","Russian Federation"
4178,Mail.Ru,"Russian Federation"
2190,"MYTECH Mikhail Yakovlev",Norway
1075,"United Network LLC","Russian Federation"
631,"mail.ru", Netherlands
Создайте вспомогательный массив, в цикле формируя его ключи из конкатенации 2-ого и 3-его элементов, а в значения прибавляйте первый элемент.
 

Jovanni

Новичок
Подскажите как пожалуйста!!!!
Не получается никак.....
Я новичок.
 

radioheaded

PHP нуб
Вы, новичок, заспамили уже три темы тут, потратив такое количество времени, которое у обычного новичка уходит на изучение всего необходимого для решения этой проблемы. Покажите, что вы попробовали и где у вас не получается.
 

Jovanni

Новичок
PHP:
$fz = fopen ( 'www.txt', 'w' );
$homepage = file_get_contents(''.$ip2name.'-'.$fromf.'-'.$tof.'.txt');
preg_replace_callback('/(?!^|\n)([^,]+),([^,]+),([^,]+)(?=$|\n)/is', function ($a) use (&$g){$g[$a['2']][$a['3']]=$g[$a['2']][$a['3']]+$a['1'];}, $homepage);       
fwrite($fz,array($g));
//preg_replace_callback('/(?!^|\n)([^,]+),([^,]+),([^,]+)(?=$|\n)/is', "C", $homepage);       
//function C($a){
//	global $g;
//	$g[$a['2']][$a['3']]=$g[$a['2']][$a['3']]+$a['1'];
//	}
//print_r($g);
fclose($fz);
 

Jovanni

Новичок
это после обработки уже и то не получается
а как сделать во время обработки...
Если сможете помогите плз......
 

radioheaded

PHP нуб
Это вам кто-то ерунду подсказал в другой теме. Покажите, как вы сами начали решать задачу. Я-то смогу вам написать, но вы же ничего не поймете. Если вам нужен просто готовый результат, то обратитесь в раздел Работа.
 

Jovanni

Новичок
Пробовал пока по array_sum; Если честно.
Подскажите пожалуйста в каком направлении копать ??
 
Сверху