Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> подсчёт одинаковых слов в строках файла 
:(
    Опции темы
SeregaGREY
Дата 29.6.2008, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 28.7.2006

Репутация: нет
Всего: 0



Мне нужно подсчитать количество строк, где встречается одинаковое слово.
файл:
Код

111.11.11.1 - бла
123.12.34.67 - бла
111.11.11.1 - бла


я сделал пока это:
Код

$data = File($file);
for ($p=0;$p<count($data);$p++) {
$dat_arr = explode("-", $data[$p]);
echo $dat_arr[0]."<br>";
}


 то есть вывожу все IP на экран, а мне нужно вывести :
Код

111.11.11.1 - встречается 2 раза
123.12.34.67 - встречается 1 раза


как это сделать?
PM MAIL   Вверх
Feldmarschall
Дата 29.6.2008, 20:20 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



вместо вывода на экран прибавляешь единичку к элементу массива, ключом которого является IP адрес.
PM   Вверх
SeregaGREY
Дата 29.6.2008, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 28.7.2006

Репутация: нет
Всего: 0



Цитата(Feldmarschall @ 29.6.2008,  20:20)
вместо вывода на экран прибавляешь единичку к элементу массива, ключом которого является IP адрес.

каким ключём. вообще не понял((
PM MAIL   Вверх
skyboy
Дата 29.6.2008, 20:54 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



делаешь массив.
ассоциативный.
ключем массива является та часть строки, повторения которых ты хочешь посчитать(судя по приведенному тобой примеру, Feldmarschall предположил, что это IP-адрес).
берешь очередную строку. выделяешь часть, повторения которой ты хочешь посчитать. ищешь в массиве элемент с таким ключом. находишь - увеличиваешь значение этого элемента на 1. не находишь - создаешь со значением "1" в нем.

PM MAIL   Вверх
Mal Hack
Дата 29.6.2008, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



А можно и так:
Код

preg_match_all("/^(.+?)\s\-\s$/",file_get_contetns($filename),$matches,PREG_PATTERN_ORDER);
print_r(array_count_values ($matches[1]));

PM ICQ   Вверх
SeregaGREY
Дата 30.6.2008, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 28.7.2006

Репутация: нет
Всего: 0



Цитата(Mal Hack @ 29.6.2008,  21:05)
А можно и так:
Код

preg_match_all("/^(.+?)\s\-\s$/",file_get_contetns($filename),$matches,PREG_PATTERN_ORDER);
print_r(array_count_values ($matches[1]));

пишет - неизвестная функция file_get_contents

skyboy  smile 
PM MAIL   Вверх
Feldmarschall
Дата 30.6.2008, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



На редкость древняя версия пхп. 
Впрочем, не стоит расценивать реплику Mal Hack, как ответ на твой вопрос. Это просто иллюстрация возможностей языка. следующая стадия изучения, когда ты поймешь, как это вообще работает. Ты, кстати, хочешь понять? Или просто код, чтобы работал?

Тебе что нужно? посчитать слова. для этого их надо положить в какую-то переменную. удобнее всего использовать массив, где будет слово и количество его вхождений, правильно? Это тебе понятно?



PM   Вверх
Mal Hack
Дата 30.6.2008, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(Feldmarschall @  30.6.2008,  10:40 Найти цитируемый пост)
Впрочем, не стоит расценивать реплику Mal Hack, как ответ на твой вопрос. 

Я тут репликами не бросаюсь, а предложил как вариант. Согласен с вами, вариант, скажем так из области "это изврат для отладки"...
При этом, мое желание было показать возможность использования array_count_values, как раз то, что автору и нужно.
Вариант для работы уже можно представить, как (как один из вариантов, опять таки):
Код
while(($ps = explode(" - ",each($data)))!=false)
{$dt[] = $ps[0];}
$counts = array_count_values($dt);

PM ICQ   Вверх
SeregaGREY
Дата 30.6.2008, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 28.7.2006

Репутация: нет
Всего: 0



Цитата(Feldmarschall @ 30.6.2008,  10:40)
На редкость древняя версия пхп. 
Впрочем, не стоит расценивать реплику Mal Hack, как ответ на твой вопрос. Это просто иллюстрация возможностей языка. следующая стадия изучения, когда ты поймешь, как это вообще работает. Ты, кстати, хочешь понять? Или просто код, чтобы работал?

Тебе что нужно? посчитать слова. для этого их надо положить в какую-то переменную. удобнее всего использовать массив, где будет слово и количество его вхождений, правильно? Это тебе понятно?

конечно хоче понять. весь php.net по array прочитал) особенно где упоминают key.
нашёл array_intersect_key, array_diff_key. но не получается.
я понял что надо создать массивы с одинаковыми IP и потом посчитать в них количество элементов, но я не понял как создать эти массивы из моего массива!
PM MAIL   Вверх
Feldmarschall
Дата 30.6.2008, 11:49 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



да не нужна тебе готовая функция. хотя странно, что ты её не нашел, особенно после того, как тебе её открытым текстом написали.

Функции надо использовать только тогда, когда ты понимаешь, что они делают. иначе ты будешь не программист, а механический болванчик.
Я могу понять, когда матерый профи, сидящий на конвейере, старается как можно больше готовго кода использовать. Но вам-то, новичкам, пока только учитесь, и над вами дедлайн не каплет - сам бог велел разбираться, понимать, а не гнать продукт.

Как создать эти массивы из твоего массива, я тебе написал, сразу.
В твоем собственном цикле, вместо того, чтобы выводить сразу ip адрес, записывать его в массив.
Неужели это так сложно?

Ты знаешь, что ключом массива может быть не только циферка 1 2 3, но и любое слово? Можешь писать в качестве ключа свой айпи адрес?
Ты вообще с массивами работал? Как добавить, какие бывают ключи? Если нет, то тебе именно это надо спрашивать в первую очередь, без этого в пхп вообще никуда. 
PM   Вверх
SeregaGREY
Дата 30.6.2008, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 28.7.2006

Репутация: нет
Всего: 0



Цитата(Feldmarschall @ 30.6.2008,  11:49)
да не нужна тебе готовая функция. хотя странно, что ты её не нашел, особенно после того, как тебе её открытым текстом написали.

Функции надо использовать только тогда, когда ты понимаешь, что они делают. иначе ты будешь не программист, а механический болванчик.
Я могу понять, когда матерый профи, сидящий на конвейере, старается как можно больше готовго кода использовать. Но вам-то, новичкам, пока только учитесь, и над вами дедлайн не каплет - сам бог велел разбираться, понимать, а не гнать продукт.

Как создать эти массивы из твоего массива, я тебе написал, сразу.
В твоем собственном цикле, вместо того, чтобы выводить сразу ip адрес, записывать его в массив.
Неужели это так сложно?

Ты знаешь, что ключом массива может быть не только циферка 1 2 3, но и любое слово? Можешь писать в качестве ключа свой айпи адрес?
Ты вообще с массивами работал? Как добавить, какие бывают ключи? Если нет, то тебе именно это надо спрашивать в первую очередь, без этого в пхп вообще никуда.

а как задать IP как ключ?

в пхп.нет написано только:
Код

<?php
$array = array(
    'fruit1' => 'apple',
    'fruit2' => 'orange',
    'fruit3' => 'grape',
    'fruit4' => 'apple',
    'fruit5' => 'apple');

// этот цикл выведет все ключи ассоциативного массива,
// значения которых равны "apple"
while ($fruit_name = current($array)) {
    if ($fruit_name == 'apple') {
        echo key($array).'<br />';
    }
    next($array);
}
?>

PM MAIL   Вверх
Feldmarschall
Дата 30.6.2008, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Да точно так же, как любое другое значение. 
В пхп нет написано, как определять массив, готовый
А тебе нужно добавление нового элемента.
Добавление делается очень просто:
$array[ключ]=значение;
Вот и пиши свой айпи в качестве ключа.
внутри квадратных скобок можно писать практически любую конструкцию языка - константу, функцию, переменную, строковый литерал.

Это сообщение отредактировал(а) Feldmarschall - 30.6.2008, 14:04
PM   Вверх
Mal Hack
Дата 30.6.2008, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



А чем не устраивает мой вариант? Ассоциативные массивы, это лишняя память, т.к. во внутреннем представлении все равно в числа перевод идет...
PM ICQ   Вверх
SeregaGREY
Дата 30.6.2008, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 28.7.2006

Репутация: нет
Всего: 0



Цитата(Mal Hack @ 30.6.2008,  14:45)
А чем не устраивает мой вариант? Ассоциативные массивы, это лишняя память, т.к. во внутреннем представлении все равно в числа перевод идет...

пишет allowed memory чёто там... наверно памяти не хватает

"$array[ключ]=значение;" - так у меня там много всяких IP. я не могу вручную туда каждый раз прописывать их же.
PM MAIL   Вверх
skyboy
Дата 30.6.2008, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(Mal Hack @  30.6.2008,  13:45 Найти цитируемый пост)
А чем не устраивает мой вариант?

ты не обижайся, но я тоже считаю, что твой вариант с регулярками и массивами сложноват для человека, который ещё и с массивами-то не познакомился. а так твой вариант - вполне рабочий. 
Цитата(SeregaGREY @  30.6.2008,  14:21 Найти цитируемый пост)
я не могу вручную туда каждый раз прописывать их же. 

откуда у тебя возьмется "вручную"? ты же эти ip из файла вытаскиваешь! ты с циклами знаком? вот и перебираешь/обрабатываешь в цикле каждую строку файла, выделяешь из неё часть от начала до первого пробела - вот тебе и ip. разве нет?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0639 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.