php explode: split string into words by using space a delimiter php explode: split string into words by using space a delimiter arrays arrays

php explode: split string into words by using space a delimiter


For splitting the String into an array, you should use preg_split:

$string = 'This is a    string';$data   = preg_split('/\s+/', $string);

Your second part (counting spaces):

$string = 'This is a    string';preg_match_all('/\s+/', $string, $matches);$result = array_map('strlen', $matches[0]);// [1, 1, 4]


Here is one way, splitting the string and running a regex once, then parsing the results to see which segments were captured as the split (and therefore only whitespace), or which ones are words:

$temp = preg_split('/(\s+)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);$spaces = array();$words = array_reduce( $temp, function( &$result, $item) use ( &$spaces) {    if( strlen( trim( $item)) === 0) {        $spaces[] = strlen( $item);    } else {        $result[] = $item;    }    return $result;}, array());

You can see from this demo that $words is:

Array(    [0] => This    [1] => is    [2] => a    [3] => string)

And $spaces is:

Array(    [0] => 1    [1] => 1    [2] => 4)


You can use preg_split() for the first array:

$str   = 'This is a    string';$words = preg_split('#\s+#', $str);

And preg_match_all() for the $spaces array:

preg_match_all('#\s+#', $str, $m);$spaces = array_map('strlen', $m[0]);