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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление повторов из строки 
:(
    Опции темы
PROme
Дата 18.11.2005, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -1
Всего: 1



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

слово1 слово2 слово3 слово3 слово1 слово1 слово2 слово3

нужно привести к виду

слово1 слово2 слово3 слово1 слово2 слово3 - чтобы небыло повторос среди соседних слов

первое, что приходит на ум - разбиваем строку на слова и сравниваем поочередно соседние, если следующее слово = текущему, значит удаляем его, если нет, передвигаемся на слово впиред и так до конца строки

а поизящнее способа нет smile


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


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


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

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



Попробуй так:
Код

<?php

$str = preg_replace( "#(?:(слово2(\s|$)))+#isS" , "\\2" , $str );

?>


Это сообщение отредактировал(а) Mal Hack - 18.11.2005, 21:54
PM ICQ   Вверх
PROme
Дата 20.11.2005, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -1
Всего: 1



Mal Hack
немного не так понял
сами слова нам неизвестны


--------------------
SEO-мастер
PM MAIL WWW   Вверх
Mal Hack
Дата 20.11.2005, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Разделяешь слова по пробелам, делаешь array_unique, затем join через | и подставляешь на место "слово2"
PM ICQ   Вверх
PROme
Дата 20.11.2005, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -1
Всего: 1



Mal Hack
ну спасибо smile
тока по-моему, это далеко не более простой и легкий для машины способ
если будут еще идеи, пишите, пока поюзаю простенький свой...


--------------------
SEO-мастер
PM MAIL WWW   Вверх
Mal Hack
Дата 20.11.2005, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Код
<?php

print $str = "слово1 слово2 слово3 слово3 слово1 слово1 слово2 слово3";

print "<br>";

$a = explode( " " , $str );
$i = 1;
while( $i < count( $a ) )
 {
  if( $a[ $i ] === $a[ $i - 1 ] ) 
   {  unset( $a[ $i ] );  }
  else
   {  $i++;  }
 }
$str = join( ' ' , $a );

print $str;

?>


Это сообщение отредактировал(а) Mal Hack - 20.11.2005, 20:54
PM ICQ   Вверх
PROme
Дата 21.11.2005, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -1
Всего: 1



ага, пасибки
с реализацией какраз тут проблем не возникает, а вот алгоритм, ну ладно, не буду заморачиваться, и так сойдет

кстати, если кто будет юзать, лучше так:

Код

<?php

print $str = "слово1 слово2 слово3 слово3 слово1 слово1 слово2 слово3";

print "<br>";

$a = explode( " " , $str );
$i = 0;
while( $i < count( $a ) )
 {
  if( $a[ $i ] === $a[ $i + 1 ] ) 
   {  unset( $a[ $i ] );  }
  else
   {  $i++;  }
 }
$str = join( ' ' , $a );

print $str;

?>


иначе

Код

print $str = "слово1 слово2 слово3 слово3 слово3 слово1 слово1 слово2 слово3";


обработается не до конца
я же нигде не писал, что слов подряд может быть только два ;)


--------------------
SEO-мастер
PM MAIL WWW   Вверх
-=Ustas=-
Дата 22.11.2005, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


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

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



А почему бы не заюзать array_unique() ?


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
-=Ustas=-
Дата 22.11.2005, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


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

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



По-моему лучше так уже:
Код

<?php

$a = array();
$b = array();
$str = "слово1 слово2 слово3 слово3 слово1 слово1 слово2 слово3";

$a = explode(" ", $str);
$b = array_unique($a);
$str = join(' ', $b);

echo $str;

?>



--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Mal Hack
Дата 22.11.2005, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



-=Ustas=- надо не все повторы удалить, а только те, которые идут подряд.
PM ICQ   Вверх
-=Ustas=-
Дата 22.11.2005, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


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

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



Цитата(PROme @ 18.11.2005, 18:45)
в общем задача: удалить из строки повторы слов, идущих продляд, т.е. строку вида:

smile Сорьки, не заметил... Ну тогда только в цикле пробегаться, я пока другого решения, более элегантного, не вижу.


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

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

Важно:

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

Внимание:

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

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

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


 




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


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

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