Подскажите как сравнить первые элементы многомерного массива?
Мне необходимо посчитать одинаковые url и вывести те, которых больше всего.
пример лог файла: 85.164.152.30 - - [23/May/2012:14:01:05 +0200] "GET http://www.vgtv.no/video/img/94949_160px.jpg HTTP/1.1" 200 3889 "http://www.vgtv.no/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0" Вот мой JS код: $.get('file.log', function(data) { var lines = data.split("\n"); $.each(lines, function(n, elem) { var url = elem.match(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig); var parts = url.toString().split(',h'); var file=parts[0]; var hostname='h' + parts[1]; }); В итоге я получаю под parts[0] все имена файлов, как мне их теперь сравнить между собой и посчитать одинаковые, как я понимаю это первые элементы многомерного массива? |
Цитата:
var parts = url.toString().split(',h'); Зачем вот это надо, если url и так массив? В общем, если я правильно понял, что надо, то как-то так: $.get('file.log', function(data) { var countObj = {}; var lines = data.split("\n"); $.each(lines, function(n, elem) { var url = elem.match(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig); var file = url[0]; var hostname = url[1]; if (file in countObj) { countObj[file]++; } else { countObj[file] = 1; } }); var urlArr = []; for(var url in countObj) { var tmpObj = {url: url, count: countObj[url]}; urlArr.push(tmpObj); } urlArr.sort(function(obj1, obj2){ return obj2.count - obj1.count }); alert( JSON.stringify(urlArr,'',2) ); }); |
Спасибо вам за совет! Сейчас думаю, что делаю что-то не так, мне нужно вывести 5 хостов, у которых больше всего траффика и 5 более запрашиваемых файлов. По этому лог файлу.
|
Я так понимаю что нужно определять по этой цифре 3889, найти сумму?
|
Часовой пояс GMT +3, время: 06:05. |