Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Поиск одинаковых значений в строке

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
DarkLan
Отправлено: 06 Сентября, 2016 - 18:37:00
Post Id



Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Июль 2016  


Помог: 0 раз(а)




Добрый вечер.
Если ли возможность найти одинаковые (числа, слова) в строке?
Например:
PHP:
скопировать код в буфер обмена
  1.  
  2. $text = "10 20 30 40 50 20 100 200";
  3.  


Спасибо.
 
 Top
Строитель
Отправлено: 06 Сентября, 2016 - 21:11:51
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




DarkLan пишет:
Если ли возможность найти одинаковые (числа, слова) в строке?
PHP:
скопировать код в буфер обмена
  1. function findSubstr($text, $substr) {
  2.     return mb_substr_count(mb_strtolower($text), $substr);
  3. }
  4. // Вывод количества совпадений подстроки в строке
  5. echo findSubstr('Текст, ещё текст, и ещё текст', 'текст');// 3
  6.  
  7.  
  8. function findNumber($text, $numb) {
  9.     preg_match_all('~\d+~', $text, $numbers);
  10.     $result = array_count_values($numbers[0]);
  11.     return $result[$numb];
  12. }
  13. // Вывод количества совпадений числа в строке
  14. echo findNumber('10 20 30 40 50 20 100 200', 20);// 2
 
 Top
DarkLan
Отправлено: 06 Сентября, 2016 - 23:16:51
Post Id



Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Июль 2016  


Помог: 0 раз(а)




То, что вы написали - можно сделать меньшим кодом. У вас суть поиска по константе. В первом случаем - это ТЕКСТ, другой - 20. Суть вопроса не в том, что бы найти что-то в строке или массиве, а в том, что бы найти совпадения в строке, которая динамическая и по какому-то регулярному выражению искать не получится (у меня нет идей, как по регулярке это можно реализовать).

Прошу пишите свои идеи, код не так важен, как понять суть реализации этого.
 
 Top
Строитель
Отправлено: 07 Сентября, 2016 - 19:51:01
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




DarkLan пишет:
То, что вы написали - можно сделать меньшим кодом
Возможно, я и не претендую на мистера "Компактный код", пишу как умею на данный момент, и разумеется, пытаюсь самосовершенствоваться Улыбка
DarkLan пишет:
У вас суть поиска по константе. В первом случаем - это ТЕКСТ, другой - 20.
Абсолютно верно.
DarkLan пишет:
Суть вопроса не в том, что бы найти что-то в строке или массиве, а в том, что бы найти совпадения в строке
Ну, вы ведь в первом посту не так подробно описали суть задачи, поэтому и был предложен такой вариант.
DarkLan пишет:
по какому-то регулярному выражению искать не получится (у меня нет идей, как по регулярке это можно реализовать)
Значит вы плохо разбираетесь в механизме регулярных выражений, т.к. у меня есть идеи их использования в вашей задаче
DarkLan пишет:
Прошу пишите свои идеи, код не так важен, как понять суть реализации этого.
Есть хорошее выражение, процитирую: "Болтовня ничего не стоит - покажите мне код". Я не буду описывать алгоритм решения, вы его и сами прекрасно сможете прочитать из моего кода. В этом его варианте поиск совпадений не привязан к константным значениям
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. function findMatch($text) {
  4.     $text = mb_strtolower($text, 'UTF-8');
  5.     preg_match_all('~\d+|[^\d\s,?\.]+~u', $text, $numbers);
  6.     $values = array_count_values($numbers[0]);
  7.     $result = '<table><tr><th>Значения'.
  8.         '</th><th>Повторы</th></tr>';
  9.     foreach ($values as $val => $sum) {
  10.         if ($sum > 1) {
  11.             $result .= '<tr><td>'. $val .'</td><td>'. $sum .'</td></tr>';
  12.             $bool = true;
  13.         }
  14.     }
  15.     $result .= '</table>';
  16.    
  17.     return (isset($bool) ? $result : false);
  18. }
  19.  
  20. $str = 'Текст, ещё текст, и ещё текст, и какое-то число, например 7 '.
  21.     '10 20 30 40 50 20 100 200';
  22.  
  23. echo findMatch($str);
  24. /*
  25.     Значения Повторы
  26.     текст    3
  27.     ещё      2
  28.     и        2
  29.     20       2
  30. */
  31.  
 
 Top
dcc0
Отправлено: 07 Сентября, 2016 - 22:22:29
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Как идея:
1 ) Разбить на массив - explode
2 ) array_count_values
3 ) Потом в полученном массиве показать то, что в значнии больше 1
В принципе все.


-----
Март 2021. Бросил программирование
 
 Top
Строитель
Отправлено: 07 Сентября, 2016 - 22:54:19
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




dcc0 пишет:
Разбить на массив - explode
В таком случае придётся ещё как-то обрабатывать знаки препинания, т.к подстроки вида "текст," или "текст." (и т.п.) не будут учитываться в сравнении. Именно поэтому я использовал регулярные выражения. Ну а в остальном ваш алгоритм не отличается от моего )
 
 Top
DarkLan
Отправлено: 08 Сентября, 2016 - 01:35:55
Post Id



Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Июль 2016  


Помог: 0 раз(а)




dcc0
Ни в коем случаем не хотел оскорбить.

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

Цитата:
Болтовня ничего не стоит - покажите мне код
Суть вопроса в коде. Писать говно-код не очень хорошо, а если идеи нет как это реализовать - тогда только говно-код и получается.
 
 Top
Строитель
Отправлено: 08 Сентября, 2016 - 02:00:14
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




DarkLan пишет:
Ваш вариант испытаю на практике, логика понятна. Спасибо.
При необходимости в шаблон регулярного выражения добавите ещё символов (например, воскл. знак, он ведь может встретиться в тексте).
(Добавление)

DarkLan, я не знаю, для каких целей вам было нужно это решение, но когда я продемонстрировал его результат своей жене, она сказала, что этот код ей понадобится при копипасте больших текстов - там как раз нужно проверять часто встречающиеся слова )
 
 Top
Ch_chov
Отправлено: 08 Сентября, 2016 - 06:10:39
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Строитель, для слов есть str_word_count.
 
 Top
dcc0
Отправлено: 08 Сентября, 2016 - 09:53:40
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Ch_chov точняк

Вот такой код:
PHP:
скопировать код в буфер обмена
  1. $str = "Hello friend, you're looking          good today! friend, looking:";
  2. print_r($a);


Выводит вот такой результат:

PHP:
скопировать код в буфер обмена
  1. Array ( [Hello] => 1 [friend] => 2 [you're] => 1 [looking] => 2 [good] => 1 [today] => 1 )


Строитель, не подумайте, что я с пренебрежением отнесся к вашему коду, просто больше обратил внимание на тот комментарий автора, в котором он просит идеи, а не код.
(Добавление)
Только печальный момент:
Цитата:
Эта функция считает словами последовательности алфавитных символов


-----
Март 2021. Бросил программирование
 
 Top
DarkLan
Отправлено: 08 Сентября, 2016 - 12:10:55
Post Id



Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Июль 2016  


Помог: 0 раз(а)




Строитель
Спасибо за ответ. +. Пойду почитаю о регулярных выражениях...
(Добавление)
dcc0 и Ch_chov
Вам тоже спасибо! Но в строке входящую в функцию попадают как цифры, так и слова. Возможно правильно будет написать две функции для чисел и слов, но так как это не коммерческий интерес, а научный то меня ответ Строитель полностью устраивает (интерес был в самой логики построения решения).
 
 Top
Строитель
Отправлено: 08 Сентября, 2016 - 18:00:52
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




Ch_chov пишет:
Строитель, для слов есть str_word_count.
Благодарю )
(Добавление)
dcc0, всё ок )
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB