[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как разбить строку на слова?
Lutsk
Есть некий текст, нужно разбить его на 2 части, чтоб была возможность их по-разному оформить. Вот, например, эта функция обрезает символы, суть та же, только касательно слов:

$content = 'Здесь некая строка'
$content = substr( $content, 0, 1 );
... тра-та-та;
$content = substr( $content, 2, 50 );

Смотрел справочник по функциям, но так и не разобрался ввиду скудных познаний.
Спасибо



Спустя 21 минута, 29 секунд (3.09.2011 - 14:56) alex12060 написал(а):
Цитата
нужно разбить его на 2 части


Как? Так?


З и десь некая строка
или
Зде и сь некая строка
или так?
Здесь нека и я строка


Опишите подробней..

Спустя 5 минут, 22 секунды (3.09.2011 - 15:01) dadli написал(а):
если я вас права понял, вам нужно что то такого:

$content = 'Здесь некая строка';
$mas = explode(" ",$content);

echo $mas[0]." <b> ".$mas[1]." </b> ".$mas[2];

Спустя 1 минута, 6 секунд (3.09.2011 - 15:02) bengun написал(а):
посмотри в сторону функции explode http://php.net/manual/ru/function.explode.php

Спустя 2 минуты, 2 секунды (3.09.2011 - 15:04) Lutsk написал(а):
вобщем, допустим первые 2 слова мне нужно будет выделить от остальных. В итоге на выводе должно получиться, например, такое:
Слово слово слово слово слово слово слово слово слово ...
dadli, но эта функция все слова загоняет в массив. А если в тексте 1000 слов?

Например, анонс новости. Вид в итоге такой:
Саперы обезвредили особо опасный вибратор...

Спустя 19 минут, 16 секунд (3.09.2011 - 15:23) forza написал(а):
function getWords($string, $count = 1)
{
$title = null;
$words = explode(" ", $string);
for($i = 0; $i < $count; $i++)
$title .= $words[$i]." ";
return $title;
}

$string = 'Hello my name is vasja";
echo getWords($string, 2);
// echo Hello my

Спустя 11 минут, 43 секунды (3.09.2011 - 15:35) Invis1ble написал(а):
$string = 'Саперы обезвредили особо опасный вибратор';
echo preg_replace('#^([\pL-]+\pZ){2}#su', '<span style="color:#f00">$0</span>', $string);

Спустя 8 минут, 46 секунд (3.09.2011 - 15:44) Lutsk написал(а):
forza, да, наверное надо по этому пути идти. Хотя тут получается, остальную часть надо тоже отделить от первых двух слов и вывести на экран. Получается два цикла...

Invis1ble, элегантное решение. И тут, наверное, $string надо перед этим обрезать функцией substr( $string, 0, 50 ), верно?

Спустя 4 минуты, 36 секунд (3.09.2011 - 15:49) Invis1ble написал(а):
Lutsk
зачем обрезать? я дал код, подсвечивающий первые два слова.
Или тебе что-то другое надо?

Спустя 1 минута, 7 секунд (3.09.2011 - 15:50) Lutsk написал(а):
общая длина строки на определенное количество слов, 10 например. Всё, что дальше - обрезается

Спустя 8 минут, 54 секунды (3.09.2011 - 15:59) Invis1ble написал(а):
так тебе подсветить нужно или обрезать, я не понял?

Спустя 5 минут, 33 секунды (3.09.2011 - 16:04) Lutsk написал(а):
Цитата (Invis1ble @ 3.09.2011 - 12:59)
так тебе подсветить нужно или обрезать, я не понял?

и то и другое

Спустя 8 минут, 54 секунды (3.09.2011 - 16:13) Invis1ble написал(а):
$string = 'Саперы обезвредили особо опасный вибратор вибрирующий вибрационно.';
echo preg_replace('#^((?:[\pL-]+\pZ){2})((?:[\pL-]+\pZ){3}).*#su', '<span style="color:#f00">$1</span>$2...', $string);

обрезает 5 слов

Спустя 6 минут, 31 секунда (3.09.2011 - 16:20) Lutsk написал(а):
Invis1ble, держи +, это то что нужно. С регулярными выражениями я пока не знаком, но думаю, разберусь. Если что, спрошу совет

Спустя 24 минуты, 8 секунд (3.09.2011 - 16:44) Lutsk написал(а):
Invis1ble, что я делаю не так? С этим кодом текст обрезается на 200 символов и выводится:

<?php
$content = $post->post_content;
$content = strip_tags($content);
$content = substr( $content, 0, 200 );
echo $content;
?>

а вот так не хочет:

<?php
$content = $post->post_content;
echo preg_replace('#^((?:[\pL-]+\pZ){2})((?:[\pL-]+\pZ){3}).*#su', '<span style="color:#f00">$1</span>$2...', $content);
?>

выводится полностью весь текст, без изменений и обрезки

Спустя 5 минут, 7 секунд (3.09.2011 - 16:49) Invis1ble написал(а):
Lutsk
А текст в какой кодировке? Дело в том, что это регулярка для юникода.

Спустя 6 минут, 17 секунд (3.09.2011 - 16:55) Invis1ble написал(а):
echo preg_replace('#^((?:[\w-]+\s){2})((?:[\w-]+\s){3}).*#s', '<span style="color:#f00">$1</span>$2...', $content);




Спустя 18 минут, 6 секунд Invis1ble написал(а):
Можно так еще попробовать (вдруг там не только буквы тире и пробелы)
echo preg_replace('#^((?:.+\s+){2})((?:.+\s+){3}).*?#sU', '<span style="color:#f00">$1</span>$2...', $content);

Спустя 2 часа, 5 минут, 15 секунд (3.09.2011 - 19:00) neadekvat написал(а):
Любите вы все усложнять.

$text = 'Это некий пример текста.';
$space_pos = strpos($text, ' ');
$first_word = substr($text, 0, $space_pos);
$text = substr($text, $space_pos);
echo '<b>'. $first_word .'</b>'. $text;

Спустя 11 часов, 45 минут, 15 секунд (4.09.2011 - 06:46) Invis1ble написал(а):
Цитата
$text = 'Это некий пример текста.';
$space_pos = strpos($text, ' ');
$first_word = substr($text, 0, $space_pos);
$text = substr($text, $space_pos);
echo '<b>'. $first_word .'</b>'. $text;

Как по мне - так этот код - усложнение

Спустя 3 часа, 11 минут, 8 секунд (4.09.2011 - 09:57) Lutsk написал(а):
Цитата (Invis1ble @ 3.09.2011 - 13:55)
echo preg_replace('#^((?:.+\s+){2})((?:.+\s+){3}).*?#sU', '<span style="color:#f00">$1</span>$2...', $content);

Вот этот код сработал. Выложил сайт на тестовый хостинг, можно посмотреть:


http://farmaplant.hostsites.ru/

Сам сайт на WordPress, кодировка UTF-8. Ниже привожу фрагмент кода нижнего среднего блока:


<div class="lastert_news">

<h1>
LASTEST <span>NEWS</span></h1><a class="twitter" href="#">Follow us on twitter</a> <!--ССЫЛКА НА ТВИТТЕР-->
<div class="clear"></div>
<?php

$args = array( 'numberposts' => 1, 'category' => 39 );// ID раздела - см. в адресной строке браузера
$lastposts = get_posts( $args );
foreach($lastposts as $post) : setup_postdata($post); ?>
<span
class="date"><?php the_date(); ?></span>
<?php

$content = $post->post_content;
$content = strip_tags($content);
echo preg_replace('#^((?:.+\s+){2})((?:.+\s+){15}).*?#sU', '<span style="color:#f00">$1</span>$2...', $content);
?><a class="news_more" href="<?php the_permalink(); ?>"><img src="<?php bloginfo('template_url'); ?>/images/more-link.png" width="12" height="12" alt="more" /></a>
<?php
endforeach; ?>

</div>
<!--lastert_news-->


Еще бы первые два слова ссылкой на пост продублировать - вообще было бы супер. Думаю, разработчикам на WordPress этот код был бы очень кстати, а то я гуглил, - так и не нашел готового решения

Спустя 31 минута, 30 секунд (4.09.2011 - 10:28) Lutsk написал(а):
А вот для заголовка попробовал - не срабатывает, чтоб поменять цвет первого слова. Вот код функции, которая выводит заголовок:


function the_title($before = '', $after = '', $echo = true) {
$title = get_the_title();

if ( strlen($title) == 0 )
return;

$title = $before . $title . $after;

if ( $echo )
//echo $title;
echo preg_replace('#^((?:.+\s+){1})((?:.+\s+){10}).*?#sU', '<span style="color:#39F">$1</span>$2...', $title);
else
return
$title;
}

Спустя 24 минуты, 1 секунда (4.09.2011 - 10:52) Invis1ble написал(а):
1. не понятно, что за get_the_title()
2.
Цитата
$title = $before . $title . $after;

тоже не понял этого финта ушами
3. покажи текст заголовка, на котором тестируешь и как вызываешь ф-цию тоже

Спустя 6 минут, 16 секунд (4.09.2011 - 10:59) Lutsk написал(а):
get_the_title () - "возвращает заголовок записи для дальнейшего использования в php" (из мануала). Если недо поискать её код - поищу.

Вызов функции в шаблоне :
<h1><?php the_title(); ?></h1>


Сам текст - заголовок на странице этой, например http://farmaplant.hostsites.ru/?page_id=60

Спустя 6 минут, 47 секунд (4.09.2011 - 11:05) Invis1ble написал(а):
"Второй малый раздел" - заголовок? Если нужно просто выделить первое слово без "обрезки", то конечно не работает, ибо регулярка ждет минимум 11 слов, а у тебя всего 3, поэтому совпадения не происходит
echo preg_replace('#^((?:.+\s+){1})#sU', '<span style="color:#39F">$0</span>', 'Второй малый раздел');

А вообще, учи регулярки

Спустя 21 минута, 22 секунды (4.09.2011 - 11:27) Lutsk написал(а):
Цитата (Invis1ble @ 4.09.2011 - 08:05)
А вообще, учи регулярки

Само собой, учу php, но до регулярки пока не добрался. user posted image

Вот только тексты в заголовках разные на сайте, - если подставить переменную $title, окрашивается только первая буква:
echo preg_replace('#^((?:.+\s+){1})#sU', '<span style="color:#39F">$0</span>', $title);

Спустя 7 минут, 30 секунд (4.09.2011 - 11:34) Invis1ble написал(а):
Lutsk
показывай заголовок, где одна буква (только не нужно ссылки кидать)

Спустя 1 минута, 13 секунд (4.09.2011 - 11:35) neadekvat написал(а):
Цитата (Invis1ble @ 4.09.2011 - 07:46)
Как по мне - так этот код - усложнение

Абсолютно не согласен. Там все прозрачно. А если выровнять и подписать комменты - так читается лучше, чем Пушкин.
А вот с регулярками еще посидеть придется.

Спустя 2 минуты, 44 секунды (4.09.2011 - 11:38) Invis1ble написал(а):
neadekvat
С чем ты не согласен, с тем что я выразил свое мнение? smile.gif

Спустя 1 минута, 34 секунды (4.09.2011 - 11:40) neadekvat написал(а):
Цитата (Invis1ble @ 4.09.2011 - 12:38)
С чем ты не согласен, с тем что я выразил свое мнение?

Критикуйте мнение, а не человека (с) Так что я не согласен с выраженным мнением. Или на форуме уже нельзя дискутировать? smile.gif

Спустя 26 минут, 34 секунды (4.09.2011 - 12:06) Lutsk написал(а):
Цитата (neadekvat @ 4.09.2011 - 08:40)
Цитата (Invis1ble @ 4.09.2011 - 12:38)
С чем ты не согласен, с тем что я выразил свое мнение?

Критикуйте мнение, а не человека (с) Так что я не согласен с выраженным мнением. Или на форуме уже нельзя дискутировать? smile.gif

Да не ссорьтесь, - в споре рождается истина!

Спустя 5 минут, 20 секунд (4.09.2011 - 12:12) Lutsk написал(а):
Цитата (Invis1ble @ 4.09.2011 - 08:34)
Lutsk
показывай заголовок, где одна буква (только не нужно ссылки кидать)

Это на денвере глюк, а на сайте нормально

farmaplant.hostsites.ru/?page_id=60

Слева, правда, в хлебных крошках тоже меняется. Видимо, придется отказаться от этой затеи.

Спустя 23 минуты, 26 секунд (4.09.2011 - 12:35) Invis1ble написал(а):
neadekvat
Цитата
Или на форуме уже нельзя дискутировать?

конечно можно, даже нужно!
Просто мое мнение - мой код лучше, твое - твой код. Мы можем вечно спорить, но это субъективная оценка, потому что "прозрачность" - качество неизмеримое.

Спустя 7 минут, 41 секунда (4.09.2011 - 12:43) neadekvat написал(а):
Invis1ble, в данном случаи я основывался не на "мой код - твой код", а на "код на строковых функциях - регулярка". Если бы у меня код был как минимум строк в 10, а регулярка в одну - я бы еще подумал. Но когда код в 3 строки, а регулярка далеко не самая понятная и простая - лучше, имхо, использовать строковые функции.

Спустя 5 минут, 20 секунд (4.09.2011 - 12:48) Invis1ble написал(а):
neadekvat
"мой код - твой код" - это я утрировал, я прекрасно понял, что ты имел в виду

Спустя 44 минуты, 23 секунды (4.09.2011 - 13:32) Lutsk написал(а):
smile.gif во всяком случаю, думаю, топик будет полезным для других
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.