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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> заменить в строчьне не более n смайликов 
:(
    Опции темы
Mal Hack
Дата 21.12.2004, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Код

<?php

$sm = array("lol", "lol2", "lol3", "lol4");
$txt = ":lol: :lol2: :lol3: :lol4:";

preg_match_all( "#\:(\w+?|\d+?)\:#i" , $txt , $matches );

$maxsmiles = 3;
$i = 0;
$cnt = 0;
while( ( $cnt < $maxsmiles ) && ( $i < sizeof( $matches[1] ) ) )
 {
  $txt = str_replace(':'.$sm[$i].':', '<img src="'.$sm[$i].'.gif">', $txt);
  $i++;
  $cnt++;
 }

print $txt;

?>


Это сообщение отредактировал(а) Mal Hack - 21.12.2004, 22:29
PM ICQ   Вверх
Opik
Дата 21.12.2004, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 24
Всего: 55



А ты не думаешь, что $cnt тут лишнее?
Добавлено @ 23:11
Да и код, не лучше моего, та же проблема smile))
а если текст такой?
Цитата
:lol4: :lol2: :lol3: :lol4:

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


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


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

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



Код
<?php

$sm = array("lol", "lol2", "lol3", "lol4");
$txt = ":lol: :lol2: :lol3: :lol4:";

preg_match_all( "#\:(\w+?|\d+?)\:#i" , $txt , $matches );

$maxsmiles = 3;
$i = 0;
$cnt = 0;
while( ( $cnt < $maxsmiles ) && ( $i < sizeof( $matches[1] ) ) )
 {
  if( ! in_array( $matches[1][$i] , $sm ))
   {
    continue;
    $i++;
   }
  $p = strpos( $txt , $matches[0][$i],0);
  $txt = substr_replace($txt, '<img src="'.$matches[1][$i].'.gif">', $p , strlen($matches[0][$i]) );
  $i++;
  $cnt++;
 }

print $txt;

?>


Единмтвенно

Это сообщение отредактировал(а) Mal Hack - 21.12.2004, 23:41
PM ICQ   Вверх
Opik
Дата 22.12.2004, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 24
Всего: 55



Mal Hack
повторю вопрос, зачем тебе $cnt?
PM MAIL Skype   Вверх
penizillin
Дата 22.12.2004, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 8
Всего: 9



особо не вчитывался в т.з. - поправьте, если ошибаюсь.
Код

$txt = ":aaa: :bbb: :ccc: :ddd: :eee: :fff: :ggg:
:hhh: :iii: :aaa: :bbb: :ccc: :ddd: :eee: :fff: :ggg:
:hhh: :iii: :aaa: :bbb: :ccc: :ddd: :eee: :fff: :ggg: :hhh: :iii:";

$pattern = "/\:(\w+)\:/i";
$replacement = "<img src='\${1}.gif' />";
echo preg_replace($pattern, $replacement, $txt, 3); //все дело в волшебных пузырьках


output:
Код

<img src='aaa.gif' />
<img src='bbb.gif' />
<img src='ccc.gif' />
:ddd:
:eee:
:fff:
:ggg:
[etc]
:aaa:
:bbb:
:ccc:
:ddd:
[etc]


Это сообщение отредактировал(а) penizillin - 22.12.2004, 01:38
PM MAIL ICQ   Вверх
Opik
Дата 22.12.2004, 01:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 24
Всего: 55



всё гениальное просто smile
PM MAIL Skype   Вверх
IZ@TOP
Дата 22.12.2004, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Тогда уж так, если нужна быстрота:

Код

# PHP5 Only
$MaxSmiles    = 10;

$sm    = array(
   'keys'   => array(
       ':p',
       ':)',
       ':D',
   ),
   'values'    => array(
       '<img src="/i/sm1.gif">',
       '<img src="/i/sm2.gif">',
       '<img src="/i/sm3.gif">',
   ),
);

$Content->Out = str_replace($sm['keys'], $sm['values'], $Content->Out, $MaxSmiles);

Добавлено @ 02:17
PS Пенецилин, плюс ставить не буду, уже есть smile
Добавлено @ 02:19
penizillin, не, не ошибаешься. твой вариант правда более универсальный, но могут быть ошибки если смайла нет допустим такого :sex: smile Но не в этом суть.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
penizillin
Дата 22.12.2004, 02:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 8
Всего: 9



правильно.

p.s. стоит приписать в комментарий над последней строкой "php5+ only".
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0732 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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