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 :: Версия для печати :: Проблема с функцией preg_replace
Форумы портала PHP.SU » PHP » Регулярные выражения » Проблема с функцией preg_replace

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

1. mark2009 - 30 Сентября, 2009 - 18:27:21 - перейти к сообщению
В общем всё по порядку.
Задача такая - надо коды смайликов преобразовать в картинки. В базе хранится код смайла и относительный путь к картинке.
Я делаю примерно так:

PHP:
скопировать код в буфер обмена
  1.  
  2. function subst_smilies($string)
  3.     {
  4.            global $mysql;
  5.  
  6.             $smiles = array();
  7.             $sql = 'SELECT * FROM smiles';
  8.             $mysql->query($sql);
  9.  
  10.             while ($data = $mysql->parse_query('array'))
  11.             {
  12.                 $smiles[$data['smile_id']]['smile_code']        =   $data['smile_code'];
  13.                 $smiles[$data['smile_id']]['smile_image_path']  =   $data['smile_image_path'];
  14.             }
  15.  
  16.             $count = count($smiles);
  17.             for ($i = 1; $i <= $count; $i++)
  18.             {
  19.                 if (preg_match("#".$smiles[$i]['smile_code']."#", $string))
  20.                 {
  21.                     $string = preg_replace("#".$smiles[$i]['smile_code']."#", "<img src=\"".$smiles[$i]['smile_image_path']."\">", $string);
  22.                 }
  23.             }
  24.  
  25.             return $string;
  26.     }
  27.  


Вот на этой строке:
CODE (text):
скопировать код в буфер обмена
  1.  
  2.  if (preg_match("#".$smiles[$i]['smile_code']."#", $string))
  3.                 {
  4.                     $string = preg_replace("#".$smiles[$i]['smile_code']."#", "<img src=\"".$smiles[$i]['smile_image_path']."\">", $string);
  5.                 }
  6.  

у меня вываливается вот это:
Цитата:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 144804268 bytes) in D:\\Server\\www\\includes\\functions.content.php on line 101


Но мне-то нужно именно в цикле их заменить... т.е. в базе может быть сколь угодно много смайликов. И если в сообщении присутствует соответствующий код, он должен быть заменён соответствующей картинкой.

У кого какие идеи что можно сделать? Я что-то в ступоре...
2. movEAX - 30 Сентября, 2009 - 18:37:57 - перейти к сообщению
Ну зачем так все усложнять? Я конечно тоже безумно люблю регэкспы, но все-таки можно же поступить проще и использовать str_replace - она куда шустрее и менее прожорлива.
3. mark2009 - 30 Сентября, 2009 - 18:58:14 - перейти к сообщению
movEAX пишет:
Ну зачем так все усложнять? Я конечно тоже безумно люблю регэкспы, но все-таки можно же поступить проще и использовать str_replace - она куда шустрее и менее прожорлива.


К сожалению не прокатывает, я пробовал. Может быть что-то не так делаю?...
(Добавление)
По крайней мере вот такой код не катит...
CODE (text):
скопировать код в буфер обмена
  1.  
  2.  for ($i = 1; $i <= $count; $i++)
  3.             {
  4.                     $string = str_replace("/".$smiles[$i]['smile_code']."/", "<img src=\"".$smiles[$i]['smile_image_path']."\">", $string);
  5.             }
  6.  

(Добавление)
Всё, получилось. Немножко не по-русски, но ладно.

Примерно так:
PHP:
скопировать код в буфер обмена
  1.  
  2.   for ($i = 0; $i <= $count; $i++)
  3.             {
  4.  
  5.                     if (preg_match("#".$smiles[$i]['smile_code']."#", $string))
  6.                     {
  7.                             $string = str_replace("".$smiles[$i]['smile_code']."", "<img src=\"".$smiles[$i+1]['smile_image_path']."\">", $string);
  8.                     }
  9.             }
  10.  


Из-за того что исходный массив такого вида:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. Array
  3. (
  4.     [0] => Array
  5.         (
  6.             [smile_code] => :01:
  7.         )
  8.  
  9.     [1] => Array
  10.         (
  11.             [smile_image_path] => images/smilies/smile01.gif
  12.         )
  13.  
  14.     [2] => Array
  15.         (
  16.             [smile_code] => :02:
  17.         )
  18.  
  19.     [3] => Array
  20.         (
  21.             [smile_image_path] => images/smilies/smile02.gif
  22.         )
  23.  

и т.д.

 

Powered by ExBB FM 1.0 RC1