За последние 24 часа нас посетили 115947 программистов и 3042 робота. Сейчас ищут 1540 программистов ...

Получить значениия массива и заменить их. Как?

Тема в разделе "PHP для новичков", создана пользователем bkm, 27 фев 2011.

  1. bkm

    bkm Активный пользователь

    С нами с:
    22 окт 2009
    Сообщения:
    299
    Симпатии:
    0
    Есть папки со смайлами
    anime
    static
    тут еще могут быть папки с другими смайлами...

    При клике смайлы вставляются в textarea
    Надо заменить символы на html-теги img
    Пример:

    $mess= "Всем привет :anime/1.gif: желаю удачно поработать :static/2.gif:";

    Путь до папки <img src="images/smile/" />

    В итоге должно получиться - "Всем привет <img src="images/smile/anime/1.gif" /> желаю удачно поработать <img src="images/smile/static/2.gif" />"

    Пробовал так

    PHP:
    1. preg_match_all("/:(.*):/U", $mess, $out, PREG_PATTERN_ORDER);
    2.    
    3.    foreach ($out as $value => $a) {
    4.    
    5.        foreach ($a as $b) {
    6.          
    7.             $str .= $b."<br>";
    8.       }
    9.  
    10.    }
    11.  
    12. return $str;
    Результат

    HTML:
    1. :anime/1.gif:
    2. :static/2.gif:
    3. anime/1.gif
    4. static/2.gif
    Что делать дальше ума не приложу
     
  2. bkm

    bkm Активный пользователь

    С нами с:
    22 окт 2009
    Сообщения:
    299
    Симпатии:
    0
    Я знаю трёх (как минимум) хороших людей, которые могут помочь - это Gromo, igordata и titch =) Ну и Padaboo, конечно.
    Ткните носом, где почитать или на пример.
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не, я в регулярках не шарю. но тут мне кажется достаточно забить в массив коды смайлов, забить в другой массив сами смайлы и при выводе страницы делать http://ru.php.net/manual/en/function.str-replace.php ибо ей можно скормить сразу оба этих массива и она все поменяет сама.

    первый пример там же, третья часть:
    PHP:
    1. <?
    2. // Provides: You should eat pizza, beer, and ice cream every day
    3. $phrase  = "You should eat fruits, vegetables, and fiber every day.";
    4. $healthy = array("fruits", "vegetables", "fiber");
    5. $yummy   = array("pizza", "beer", "ice cream");
    6.  
    7. $newphrase = str_replace($healthy, $yummy, $phrase);
     
  4. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    я не хороший. просто помогаю там, где интересно и/или легко :)

    тут нужен preg_replace для самой простой замены найденных элементов (самый лёгкий вариант)
    и preg_replace_callback для того, чтобы заменять "по умному".

    самый лёгкий вариант:
    PHP:
    1. <?php
    2.  
    3. $text = "Всем привет :anime/1.gif: желаю удачно поработать :static/2.gif:";
    4. $text = preg_replace('#:([a-z0-9/.]+\.gif):#sUi', '<img src="images/smile/$1">', $text);
    5.  
    6. echo htmlspecialchars($text);
    7.  
    8. ?>
    для замены "по умному" пишется функция, которая получает строку и смотрит есть ли такой файл.
    если есть - возвращает <img src="... , а если нету - возвращает ту же строку.
     
  5. bkm

    bkm Активный пользователь

    С нами с:
    22 окт 2009
    Сообщения:
    299
    Симпатии:
    0
    Gromo, Вы настоящий друг, огромное спасибо.
    Про preg_replace думал, и даже пытался, но получалась ерунда, про $1 в жизни бы не догадался.

    igordata, я так делал, когда смайлы лежали в одной директории и их было не более сотни, но пользователи просят еще и еще, в итоге пришлось раскидать по папкам (анимация, статичные, мишки, обезьянки и т.д. =)). Теперь можно закинуть папку с новыми смайлами на сервер и будет всем счастье.
    Спасибо.
     
  6. VItalijs

    VItalijs Активный пользователь

    С нами с:
    17 дек 2008
    Сообщения:
    244
    Симпатии:
    0
    Адрес:
    Рига, Латвия
    PHP:
    1. <? $callback = function($matches){
    2.     if(file_exists("%img_dir%/smile/" . $matches[1])){
    3.         return '<img src="images/smile/' . $matches[1] . '">';
    4.     } else {
    5.         return $matches[1];
    6.     }
    7. }
    8. $text = "Всем привет :anime/1.gif: желаю удачно поработать :static/2.gif:";
    9. $text = preg_replace_callback('#:([a-z0-9/.]+\.gif):#sUi', $callback, $text);
    10. echo htmlspecialchars($text);
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    устроил себе геморой, понимаешь! =) учи БД!
    При заливке смайла в бд записываешь его название, код, и волшебный миме-тип. Сам смайлик пихаешь в папку под именем его id в базе без расширения и вобще не парясь.
     
  8. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    ИМХО, для смайлов вполне нормальный подход