DarkDaNTe » 2010.12.24 22:08

Можно пример текста как каждые три-пять знаков через три-пять знаков текста выделять каким-нибудь тегом. Например <b>.
Т.е. текст "Пример некоторого текста" должен стать:
При<b>мер</b> каког<b>ото </b>тек<b>ста.</b>
Что-то никак не сделаю...

Gemorroj » 2010.12.24 22:18

ну, в примере не прослеживается четкой последовательности, когда 3, когда 5?
а так с ходу - получай массив символов через str_split и с ним работай.

DarkDaNTe » 2010.12.24 22:51

Никакой последовательности и нет.. Сейчас попробую
Добавлено спустя    59 секунд:
Кстати, кириллический текст после str_split в квадратики превращается у меня почему-то

Gemorroj » 2010.12.24 23:54

эм... да... тогда не str_split, а preg_match('//u', $str);

DarkDaNTe » 2010.12.25 14:56

Можешь показать как выбрать несколько символов?

Gemorroj » 2010.12.25 15:47

что значит "выбрать"?

DarkDaNTe » 2010.12.25 16:00

Ну, сделать то что нужно мне)
Не вдуплился что-то как с помощью preg_match сделать это:

При<b>мер</b> каког<b>ото </b>тек<b>ста.</b>

Gemorroj » 2010.12.25 19:52

DarkDaNTe, пока не будет жесткой логики в каком случае 3, а в каком 5 символов, никакого алгоритма придумать нельзя, т.к. мы изначально не знаем какой должен быть результат.

DarkDaNTe » 2010.12.25 20:19

Пусть всегда будет через три символа.

Gemorroj » 2010.12.25 21:27

Код:

1
span style="color: #0000BB"><?phpclass Splitter{ const BOLD = 'b'; const ITALIC = 'i'; const UNDERLINE = 'u'; private $_str; /** * Строка для разбора * * @param string $str */ public function __construct ($str) { $this->_str = $this->_unicodeSplitter($str); } /** * Получаем результат работы сплиттера * * @param int $length * @param string $pattern * @return string */ public function get ($length, $pattern = self::BOLD) { $pattern = array('<' . $pattern . '>', '</' . $pattern . '>'); $out = ''; $iterator = 0; $patternIterator = false; foreach ($this->_str as $v) { if ($iterator == $length) { $iterator = 1; $out .= $pattern[(int)$patternIterator] . $v; $patternIterator = !$patternIterator; } else { $iterator++; $out .= $v; } } return $out; } /** * str_split с поддержкой юникода * * @param string $str * @return array */ private function _unicodeSplitter ($str) { $out = preg_split('//u', $str); unset($out[0]); end($out); unset($out[key($out)]); return $out; }}

пример использования =)

Код:

1
span style="color: #0000BB"><?php$obj = new Splitter('Пример некоторого текста');echo $obj->get(3, Splitter::BOLD);
DarkDaNTe » 2010.12.25 21:53

В результате получается:

Приер екоороо ткст

Gemorroj » 2010.12.25 22:22

поправил

DarkDaNTe » 2010.12.25 23:08

Спасибо тебе, добрый человек))