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
Форумы портала PHP.SU :: Версия для печати :: Добавление смайлов в чатовских сообшениях
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Добавление смайлов в чатовских сообшениях

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

1. LONGMAN - 09 Февраля, 2009 - 19:20:45 - перейти к сообщению
Моя задача сделать в чате модуль добавления картинок (смайлов) в сообшениях. Есть две условие, простой юзер не должен вставить более одного смайла и модуль должен работать очен быстро. Имя смайлов и адреса картинок (их болшье 500) храню в двух массывах. Помогите осушествить всё это
2. Гость - 09 Февраля, 2009 - 19:34:44 - перейти к сообщению
for($i=1;$i<count($smiles);$i++) {
$text = str_replace($text,$smiles[$i], $pict[$i]);
}
как та так...

заменяй в цикле набор символом на тяг Img с адремом картинки-смалика
3. LONGMAN - 09 Февраля, 2009 - 19:50:18 - перейти к сообщению
Не пойдёт. Так добавить столько картинок, сколько юзер захочит, а юзер не должен добавить более одного смайла
4. vitaliy_mad - 09 Февраля, 2009 - 19:54:45 - перейти к сообщению
тогда так как из вариантов...
CODE (text):
скопировать код в буфер обмена
  1.  
  2. for($i=1;$i<count($smiles);$i++) {
  3. $otext=$text;
  4. $text = str_replace($text,$smiles[$i], $pict[$i]);
  5. if ($otext!==$text)break;
  6. }
5. CodeWarrior - 09 Февраля, 2009 - 21:24:19 - перейти к сообщению
Если я правильно понял, то сделайте замену первого вхождения текста на смайл, а остальные - игнор... Например, скрипт находит в тексте (первый) *smile* и меняет его на img, а остальные игнорить. + еще если смайлы добавляются через JavaScript, то создать переменную которая отвечает за кол-во нажатий на смайлы. и задать лимит 1, а если привысил, то alert. А те смайлы что добавлены вручную - игнор (кроме первого).

Сам код напишу позже и скину.
6. LONGMAN - 09 Февраля, 2009 - 22:54:45 - перейти к сообщению
JavaScript не применяется. Ещё главный фактор, код должен работать быстро, это ведь чат..
7. LONGMAN - 10 Февраля, 2009 - 01:31:17 - перейти к сообщению
Я сделал так, как подсказал vitaliy_mad (за что огромное спасибо ему Улыбка)
PHP:
скопировать код в буфер обмена
  1. <?
  2. $count = sizeof($smiles);
  3. for ($i=1; $i<$count; $i++)
  4. {
  5. $omsg = $msg;
  6. $msg = str_replace($smiles[$i], $replaces[$i], $msg);
  7. if(($omsg !== $msg)&&($level != 'admin')) break;
  8. }
  9. ?>
Сейчас вопрос таков, можно ли добится этого эффекта только чтобы код работал ещё быстрее? Ну на пример если сделать без массывов или ещё чё небудь
8. vitaliy_mad - 10 Февраля, 2009 - 01:51:26 - перейти к сообщению
LONGMAN пишет:
Сейчас вопрос таков, можно ли добится этого эффекта только чтобы код работал ещё быстрее? Ну на пример если сделать без массывов или ещё чё небудь

можно с помощью регулярных выражений удалить все смыйлы кроме первого,а потом одной функцией (без цикла) обработать... но это только если смайлы приходят в одинаковом формате, то есть как то выделены на фоне остального текста...
9. LONGMAN - 10 Февраля, 2009 - 18:52:19 - перейти к сообщению
Они выделены точками, на пример .smile. .tongue.
А с регулярками медленнее не будет?
10. Roler - 10 Февраля, 2009 - 18:54:31 - перейти к сообщению
Имхо с регулярками будет медленнее ещё.
Да и куда вам быстрее) Счёт идёт на сотые доли секунды, максимум.
11. LONGMAN - 10 Февраля, 2009 - 19:05:29 - перейти к сообщению
Roler, тоже думаю что с регулярками будет медленнее. Это сейчас сотые доли секунды, в массывах ведь 500 объэктов, а если будет более 1000? Улыбка
(Добавление)
Кстати, как вы думаете, что быстрее работает, str_replace или str_ireplace?
12. Roler - 10 Февраля, 2009 - 19:24:55 - перейти к сообщению
LONGMAN
У вас 500 смайлов???
13. LONGMAN - 10 Февраля, 2009 - 20:59:59 - перейти к сообщению
Roler, да, а что? Улыбка Есть смайлы почти для всех сушествующих эмоциях Улыбка В php 500 объэктов для массыва это много?

 

Powered by ExBB FM 1.0 RC1