Split a line every 10 words

I want to break a line every 10 words. But if any word contains a punctuation mark, separate it after the punctuation mark and continue to separate every 10 words.

I use this, but its just split the line every 10 words.

<?php

$string = 'Lorem ipsum dolor sit amet, te has omnesque gubergren definiebas. Omnesque ullamcorper pri ut. In eos insolens atomorum moderatius, mundi menandri usu cu. Nam an dicant tritani philosophia facete minimum id sed errem omnium persequeris ad his, omnes luptatum recteque mel eu, est te laudem causae.';

$splitted = preg_replace( '~((?:\S*?\s){10})~', "$1\n", $string);

$Words = explode("\n", $splitted);

var_dump($Words);

?>
array(5) {
  [0]=>
  string(66) "Lorem ipsum dolor sit amet, te has omnesque gubergren definiebas. "
  [1]=>
  string(72) "Omnesque ullamcorper pri ut. In eos insolens atomorum moderatius, mundi "
  [2]=>
  string(66) "menandri usu cu. Nam an dicant tritani philosophia facete minimum "
  [3]=>
  string(64) "id sed errem omnium persequeris ad his, omnes luptatum recteque "
  [4]=>
  string(29) "mel eu, est te laudem causae."
}
Run codeHide result

I want to get these results, Split the line every 10 words But if any word contains a punctuation character, separate it after the punctuation character and continue to separate every 10 words

array(6) {
  [0]=>
  string() "Lorem ipsum dolor sit amet, te has omnesque gubergren definiebas. "
  [1]=>
  string() "Omnesque ullamcorper pri ut."
  [2]=>
  string() "In eos insolens atomorum moderatius, mundi  menandri usu cu."
  [3]=>
  string() "Nam an dicant tritani philosophia facete minimum id sed errem"
  [4]=>
  string() "omnium persequeris ad his, omnes luptatum recteque mel eu, est"
  [5]=>
  string() "te laudem causae."
}
Run codeHide result
+4
source share
2 answers

I would go with this:

$text_array = explode(" ", $string); 
$chunks = array_chunk($text_array, 10);
echo print_r($chunks, true);

The output should look like this:

Array
(
    [0] => Array
        (
            [0] => Lorem
            [1] => ipsum
            [2] => dolor
            [3] => sit
            [4] => amet,
            [5] => te
            [6] => has
            [7] => omnesque
            [8] => gubergren
            [9] => definiebas.
        )

[1] => Array
    (
        [0] => Omnesque
        [1] => ullamcorper
        [2] => pri
        [3] => ut.
        [4] => In
        [5] => eos
        [6] => insolens
        [7] => atomorum
        [8] => moderatius,
        [9] => mundi
    )

[2] => Array
    (
        [0] => menandri
        [1] => usu
        [2] => cu.
        [3] => Nam
        [4] => an
        [5] => dicant
        [6] => tritani
        [7] => philosophia
        [8] => facete
        [9] => minimum
    )

[3] => Array
    (
        [0] => id
        [1] => sed
        [2] => errem
        [3] => omnium
        [4] => persequeris
        [5] => ad
        [6] => his,
        [7] => omnes
        [8] => luptatum
        [9] => recteque
    )

[4] => Array
    (
        [0] => mel
        [1] => eu,
        [2] => est
        [3] => te
        [4] => laudem
        [5] => causae.
    )

)

+2
source

Is this what you want?

$string = 'Lorem ipsum dolor sit amet, te has omnesque gubergren definiebas. Omnesque ullamcorper pri ut. In eos insolens atomorum moderatius, mundi menandri usu cu. Nam an dicant tritani philosophia facete minimum id sed errem omnium persequeris ad his, omnes luptatum recteque mel eu, est te laudem causae.';
$splitted = preg_replace( '~((?:[^\s\pP]+[\s\pP]){1,10})~', "$1\n", $string);
$Words = explode("\n", $splitted);
var_dump($Words);

\pP .

:

array(10) {
  [0]=>
  string(27) "Lorem ipsum dolor sit amet,"
  [1]=>
  string(38) " te has omnesque gubergren definiebas."
  [2]=>
  string(29) " Omnesque ullamcorper pri ut."
  [3]=>
  string(37) " In eos insolens atomorum moderatius,"
  [4]=>
  string(23) " mundi menandri usu cu."
  [5]=>
  string(63) " Nam an dicant tritani philosophia facete minimum id sed errem "
  [6]=>
  string(26) "omnium persequeris ad his,"
  [7]=>
  string(32) " omnes luptatum recteque mel eu,"
  [8]=>
  string(22) " est te laudem causae."
  [9]=>
  string(0) ""
}

, :

$splitted = preg_replace( '~((?:[^\s.:;]+[\s.:;]){1,10})~', "$1\n", $string);
+2

Source: https://habr.com/ru/post/1606574/


All Articles