PHP: разделите длинную строку без разрыва слов

Я ищу что-то по линии

str_split_whole_word($longString, x) 

где $longString – это набор предложений, а x – длина символа для каждой строки. Он может быть довольно длинным, и я хочу разбить его на несколько строк в виде массива.

Так, например,

 $longString = 'I like apple. You like oranges. We like fruit. I like meat, also.'; $lines = str_split_whole_word($longString, x); $lines = Array( [0] = 'I like apple. You' [1] = 'like oranges. We' [2] = and so on... ) 

Related of "PHP: разделите длинную строку без разрыва слов"

Это решение гарантирует, что линии будут созданы без разрыва слов, что вы не получите с помощью wordwrap (). Он будет использовать пространство, чтобы взорвать строку, а затем использовать foreach для петли массива и создания строк без нарушения работы и с максимальной длиной, которая определяется с помощью $maxLineLength . Ниже приведен код, я сделал несколько тестов, и он отлично работает.

 $longString = 'I like apple. You like oranges. We like fruit. I like meat, also.'; $arrayWords = explode(' ', $longString); $maxLineLength = 18; $currentLength = 0; $index = 0; foreach ($arrayWords as $word) { // +1 because the word will receive back the space in the end that it loses in explode() $wordLength = strlen($word) + 1; if (($currentLength + $wordLength) <= $maxLineLength) { $arrayOutput[$index] .= $word . ' '; $currentLength += $wordLength; } else { $index += 1; $currentLength = $wordLength; $arrayOutput[$index] = $word; } } 

Самое простое решение – использовать wordwrap() и wordwrap() в новой строке, например:

 $array = explode( "\n", wordwrap( $str, $x)); 

Где $x – количество символов, чтобы обернуть строку.

Используйте wordwrap() для вставки wordwrap() , а затем wordwrap() для этих строк:

 // Wrap at 15 characters $x = 15; $longString = 'I like apple. You like oranges. We like fruit. I like meat, also.'; $lines = explode("\n", wordwrap($longString, $x)); var_dump($lines); array(6) { [0]=> string(13) "I like apple." [1]=> string(8) "You like" [2]=> string(11) "oranges. We" [3]=> string(13) "like fruit. I" [4]=> string(10) "like meat," [5]=> string(5) "also." } 

Сделанная функция от комментария Marcio simao

 function explodeByStringLength($string,$maxLineLength) { if(!empty($string)) { $arrayWords = explode(" ",$string); if(count($arrayWords) > 1) { $maxLineLength; $currentLength = 0; foreach($arrayWords as $word) { $wordLength = strlen($word); if( ( $currentLength + $wordLength ) <= $maxLineLength ) { $currentLength += $wordLength; $arrayOutput[] = $word; } else { break; } } return implode(" ",$arrayOutput); } else { return $string; } } else return $string; } 

Попробуйте эту функцию …….

 <?php /** * trims text to a space then adds ellipses if desired * @param string $input text to trim * @param int $length in characters to trim to * @param bool $ellipses if ellipses (...) are to be added * @param bool $strip_html if html tags are to be stripped * @param bool $strip_style if css style are to be stripped * @return string */ function trim_text($input, $length, $ellipses = true, $strip_tag = true,$strip_style = true) { //strip tags, if desired if ($strip_tag) { $input = strip_tags($input); } //strip tags, if desired if ($strip_style) { $input = preg_replace('/(<[^>]+) style=".*?"/i', '$1',$input); } if($length=='full') { $trimmed_text=$input; } else { //no need to trim, already shorter than trim length if (strlen($input) <= $length) { return $input; } //find last space within length $last_space = strrpos(substr($input, 0, $length), ' '); $trimmed_text = substr($input, 0, $last_space); //add ellipses (...) if ($ellipses) { $trimmed_text .= '...'; } } return $trimmed_text; } ?>