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]);