Извлеките фиксированное количество символов из массива, просто полные слова

Привет, у меня есть собственный текст внутри переменной:

$myvar = 'this is my custom text, it is a very long text so be patiente, take care!"; 

Мне нужно показать, что можно сказать первые 100 символов из $ myvar, но мне нужны полные слова. Например: это мой пользовательский текст, это ver … (я не хочу вырезать слова, когда я извлекаю)

Как я могу это сделать?

Спасибо!

Есть куча путей, но попробуйте это:

 $shortVersion = substr($myvar, 0, 100); if(strlen($myvar)>100 && preg_match('`\w`', $myvar{100})) $shortVersion = preg_replace('`\w+$`', '', $shortVersion); 

Вероятно, это ваш путь наименьшего сопротивления.

В комментариях пользователя о функции substr () есть несколько примеров этого

Один из самых простых:

 function wrapTrunc($str, $len) { return substr(($str=wordwrap($myvar,$len,'$$')),0,strpos($str,'$$')); } 

Основным недостатком этого wordwrap основанного на wordwrap является то, что вы тратите время и память на всю цепочку, хотя вам нужно сохранить только первые $len символы.

Вот решение на основе регулярных выражений, которое я только что взломал, что мне немного удобнее:

 <?php $myvar = 'this is my custom text, it is a very long text so be patiente, take care!'; var_dump(trunc($myvar, 50)); function trunc($str, $len = 50) { return preg_replace("/^(.{1,$len}\S)\b.*/", '$1', $str); } 

Пример вывода:

 $ php test.php string(49) "this is my custom text, it is a very long text so" 

Ну … Поскольку мы вводим код, мои 2 цента:

 <?php function noWordCut($str, $len, $before=true, $add=' ...', $punctuation=array(' ',',','.','!','?',';')){ if(!isset($str[$len]))return $str; if(in_array($str[$len], $punctuation))return substr($str, 0, $len).$add; $dir=($before)?-1:1; for(;$len+=$dir;) if(in_array($str[$len], $punctuation)) return substr($str, 0, $len).$add; return $str;// one big chunk of word? } ?> 

Угадай, что. Для этого есть встроенная функция PHP 🙂

 print wordwrap($text, 100); 

Ooops, для разрезания первой линии вы можете использовать:

 $first = strtok(wordwrap($text, 100), "\n"); 

Вот плохой пример, который, вероятно, тратит много времени на обработку и память:

 <?php $text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin congue, quam nec tincidunt congue, massa ipsum sodales tellus, in rhoncus sem quam quis ante. Nam condimentum pellentesque libero at blandit."; $length = 100; $words = explode(' ', $text); for ($x=0; $x <= count($words); $x++) { $output = implode(' ', array_slice($words, 0, $x)); if (strlen($output) >= $length) { echo $output . '...'; break; } } ?> 

Зачем? Потому что я могу.