php - uso - ¿Cómo puedo explotar y recortar el espacio en blanco?
slice php (9)
recortar y explotar
$ str = ''rojo, verde, azul, naranja'';
$ str = trim ($ str);
$ strArray = explotar ('','', $ str);
print_r ($ strArray);
Por ejemplo, me gustaría crear una matriz a partir de los elementos en esta cadena:
$str = ''red, green, blue ,orange'';
Sé que puedes explotar, recorrerlos y recortar:
$arr = explode('','', $str);
foreach ($arr as $value) {
$new_arr[] = trim($value);
}
Pero siento que hay un enfoque de una sola línea que puede manejar esto. ¿Algunas ideas?
Lo siguiente también se ocupa de los espacios en blanco al comienzo / final de la cadena de entrada:
$new_arr = preg_split(''//s*,/s*/'', trim($str));
y esta es una prueba mínima con espacios en blanco en cada posición sensible:
$str = '' first , second , third , fourth, fifth '';
$new_arr = preg_split(''//s*,/s*/'', trim($str));
var_export($str);
Puede hacer lo siguiente usando array_map :
$new_arr = array_map(''trim'', explode('','', $str));
Puedes usar preg_split() para eso.
$bar = preg_split (''/[,/s]+/'', $str);
print_r ($bar);
/* Result:
Array
(
[0] => red
[1] => green
[2] => blue
[3] => orange
)
*/
Respuesta mejorada
preg_split (''/[/s*,/s*]*,+[/s*,/s*]*/'', ''red, green thing ,, ,, blue ,orange'');
Resultado:
Array
(
[0] => red
[1] => green thing
[2] => blue
[3] => orange
)
Esta
- Se divide solo en comas
- Recorta los espacios en blanco de cada elemento.
- Ignora los artículos vacíos
- No divide un elemento con espacios internos como "cosa verde"
También puede hacer esto con una línea recta de expresión regular
preg_split(''@(?:/s*,/s*|^/s*|/s*$)@'', $str, NULL, PREG_SPLIT_NO_EMPTY);
prueba esto:
$str = preg_replace("//s*,/s*/", ",", ''red, green, blue ,orange'');
ESPECÍFICAMENTE para la cadena de ejemplo del PO, porque cada subcadena que se emparejará es una sola palabra, puede usar str_word_count() .
Código: ( Demo )
$str = '' red, green, blue ,orange '';
var_export(str_word_count($str,1)); // 1 means return all words in an indexed array
Salida:
array (
0 => ''red'',
1 => ''green'',
2 => ''blue'',
3 => ''orange'',
)
Esto también se puede adaptar para subcadenas más allá de letras (y algunos guiones y apóstrofes, si lee la letra pequeña) agregando los caracteres necesarios a la máscara de personaje / tercer parámetro.
Código: ( Demo )
$str = " , Number1 , 234, 0 ,4heaven''s-sake , ";
var_export(str_word_count($str,1,''0..9''));
Salida:
array (
0 => ''Number1'',
1 => ''234'',
2 => ''0'',
3 => ''4heaven/'s-sake'',
)
De nuevo, estoy tratando esta pregunta muy estrechamente debido a la cadena de muestra, pero esto proporcionará el mismo resultado deseado:
Código: ( Demo )
$str = '' red, green, blue ,orange '';
var_export(preg_match_all(''/[^, ]+/'',$str,$out)?$out[0]:''fail'');
$str = str_replace(" ","", $str);