separar quitar por pasar palabras letras guardar ejemplos cortar convertir como cadena arreglo array php arrays regex preg-match explode

quitar - php explode: divide la cadena en palabras usando un delimitador de espacio



pasar un array a string en php (6)

Aquí están los resultados de las pruebas de rendimiento:

$str = "This is a string"; var_dump(time()); for ($i=1;$i<100000;$i++){ //Alma Do Mundo - the winner $rgData = preg_split(''//s+/'', $str); preg_match_all(''//s+/'', $str, $rgMatches); $rgResult = array_map(''strlen'', $rgMatches[0]);// [1,1,4] } print_r($rgData); print_r( $rgResult); var_dump(time()); for ($i=1;$i<100000;$i++){ //nickb $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()); } print_r( $words); print_r( $spaces); var_dump(time());

Int (1378392870) Array ([0] => This [1] => is [2] => a [3] => string) Array ([0] => 1 [1] => 1 [2] => 4) Int (1378392871) Array ([0] => This [1] => is [2] => a [3] => string) Array ([0] => 1 [1] => 1 [2] => 4) int (1378392873)

$str = "This is a string"; $words = explode(" ", $str);

Funciona bien, pero los espacios todavía van en la matriz:

$words === array (''This'', ''is'', ''a'', '''', '''', '''', ''string'');//true

Preferiría tener palabras solo sin espacios y mantener la información sobre el número de espacios por separado.

$words === array (''This'', ''is'', ''a'', ''string'');//true $spaces === array(1,1,4);//true

Se acaba de agregar: (1, 1, 4) significa un espacio después de la primera palabra, un espacio después de la segunda palabra y 4 espacios después de la tercera palabra.

¿Hay alguna manera de hacerlo rápido?

Gracias.


Aquí hay una forma, dividiendo la cadena y ejecutando una expresión regular una vez, luego analizando los resultados para ver qué segmentos fueron capturados como la división (y, por lo tanto, solo espacios en blanco), o cuáles son palabras:

$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());

Puedes ver en esta demostración que $words es:

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

Y $spaces es:

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


Otra forma de hacerlo sería utilizando el bucle foreach.

$str = "This is a string"; $words = explode(" ", $str); $spaces=array(); $others=array(); foreach($words as $word) { if($word=='' '') { array_push($spaces,$word); } else { array_push($others,$word); } }


Para dividir el String en una matriz, debe usar preg_split :

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

Tu segunda parte (contando espacios):

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


Puedes usar preg_split() para la primera matriz:

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

Y preg_match_all() para la matriz $spaces :

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


$financialYear = 2015-2016;

$test = explode(''-'',$financialYear); echo $test[0]; // 2015 echo $test[1]; // 2016