Разделить текстовую строку на разделы (отдельные div) по 500 символов (или любое другое количество символов) с помощью PHP?

Каков наилучший способ взять текстовую строку (из базы данных mysql, например, сообщение или страницу wordpress) и разделить текст на разделы по 500 символов (или любое другое количество символов), а затем вывести каждый раздел по 500 символов, обернутый в своем собственном контейнере div?

Будучи новичком в PHP, я не знаю, как сегментировать контент на основе количества символов. Мы могли бы получить количество символов, используя:

<?php
$content = get_the_content(); //wordpress function for post content as string.
echo strlen($content);
?>

Но это все, что касается моих знаний. Может ли кто-нибудь помочь мне с этой задачей?

Допустим, я запрашивал страницу контента из базы данных WordPress, и она содержала 5000 символов. Цель состоит в том, чтобы вывести 10 элементов div или span, каждый из которых содержит 500 символов.

Заранее СПАСИБО за любую помощь.


person user2655393    schedule 16.08.2013    source источник


Ответы (1)


PHP предлагает для этого функцию, она называется «str_split()». Вы можете использовать его следующим образом:

<?php
$content = get_the_content();
$chunks = str_split($content, 500);

//Printing each chunk in a div
foreach($chunks as $chunk_content) {
    echo "<div>";
    echo $chunk_content;
    echo "</div>";
}
?>

Дополнительная информация о str_split: http://www.php.net/manual/en/function.str-split.php

РЕДАКТИРОВАТЬ: Если слова не должны обрезаться посередине, вместо этого используйте эту функцию:

<?php
$content = get_the_content();
$strings = wordwrap($content, 500, "{BREAK}"); //Put a {BREAK} every 500 characters
$chunks = explode("{BREAK}", $strings); //Put each segment separated by {BREAK} into an array field

//Printing each chunk in a div
foreach($chunks as $chunk_content) {
    echo "<div>";
    echo $chunk_content;
    echo "</div>";
}
?>

Если вы хотите сэкономить немного памяти, вы можете комбинировать эти функции следующим образом:

<?php
foreach(explode("{BREAK}", wordwrap(get_the_content(), 500, "{BREAK}")) as $chunk) {
    echo "<div>" . $chunk . "</div>\n"; //The \n creates a new line
}
?>

Для получения дополнительной информации о переносе слов см. http://www.php.net/manual/en/function.wordwrap.php

person Lukas Kolletzki    schedule 16.08.2013
comment
Спасибо Лукас. Это работает! Я не подумал о том, что иногда с помощью этого метода слова будут делиться пополам :-p Знаете ли вы какой-нибудь способ использовать str_split, но следить, чтобы слова не разделялись? Или, я думаю, если это невозможно, есть ли аналогичная функция, которая разделит массив на основе количества слов, а не количества символов? Большое спасибо за вашу помощь до сих пор. -Колин - person user2655393; 16.08.2013
comment
Большое спасибо за ваш развернутый ответ. Но почему-то код у меня не работает. Исходный код работал как по маслу (за исключением сокращения слов пополам), но ваш обновленный код не работает. Контент поста вообще не обслуживается. Просто пустая страница. Есть идеи, почему это может быть? Я использовал первый блок кода в вашем редактировании (более длинный), но я также протестировал более короткую версию с тем же результатом... ? - person user2655393; 16.08.2013
comment
Я только что понял, что причина, по которой ваше решение не работает для меня, заключается в небольшой опечатке: вы написали explore () вместо взрыва (). Теперь ваш код работает! Потрясающий. Очень полезно. Большое спасибо! Вы джентльмен и ученый! - person user2655393; 16.08.2013
comment
Ой! Извините за эту ошибку, я не сплю уже 36 часов. Получайте удовольствие! - person Lukas Kolletzki; 16.08.2013