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 y recorrerlos y recortarlos:
$arr = explode(',', $str);
foreach ($arr as $value) {
$new_arr[] = trim($value);
}
Pero siento que hay un enfoque de una línea que puede manejar esto. ¿Algunas ideas?
php
explode
trim
higher-order-functions
SeanWM
fuente
fuente
Una respuesta mejorada
Resultado:
Esta
fuente
red
con*red*
. Una mejor podría ser / (\ s *, \ s *) + /Lo siguiente también se ocupa de los espacios en blanco al inicio / final de la cadena de entrada:
y esta es una prueba mínima con espacios en blanco en cada posición sensible:
fuente
array_map
soluciones regexp producen resultados idénticos, ¿alguien podría comparar su rendimiento?así como reemplazas y explotas en una sola línea de código
dará salida a los resultados como
fuente
Al combinar algunos de los principios en las respuestas existentes, se me ocurrió
El razonamiento detrás de esto es que encontré un error en esta respuesta , donde si hay una coma al final de la cadena, devolverá un elemento en blanco en la matriz. es decir
Resultados en
Puede solucionar esto utilizando PREG_SPLIT_NO_EMPTY como se menciona en esta respuesta para eliminarlo, pero una vez que lo hace, técnicamente no es necesario eliminar comas consecutivas a través de la expresión regular, por lo tanto, la expresión abreviada
fuente
También puede hacer esto con una expresión regular de una línea
fuente
prueba esto:
fuente
preg_replace()
no genera una matriz a partir de una cadena. Esta es la respuesta correcta a la pregunta incorrecta. Voto negativo$list = preg_split("/\s*,\s*/", 'red, green, blue ,orange');
la modificación menor rehabilita la respuestaESPECÍFICAMENTE para la cadena de muestra del OP, debido a que cada subcadena que debe coincidir es una sola palabra, puede usar str_word_count () .
Código: ( Demo )
Salida:
Esto también se puede adaptar para subcadenas más allá de las letras (y algunos guiones y apóstrofes, si lee la letra pequeña) agregando los caracteres necesarios a la máscara de caracteres / tercer parámetro.
Código: ( Demo )
Salida:
Nuevamente, estoy tratando esta pregunta de manera muy limitada debido a la cadena de muestra, pero esto proporcionará el mismo resultado deseado:
Código: ( Demo )
fuente
Puede usar preg_split () para eso.
fuente
fuente
\t\n\r\0\x0B
también$ str = 'rojo, verde, azul, naranja';
$ str = recortar ($ str);
$ strArray = explotar (',', $ str);
print_r ($ strArray);
fuente