Tengo una cadena con saltos de línea en mi base de datos. Quiero convertir esa cadena en una matriz y, por cada nueva línea, saltar un lugar de índice en la matriz.
Si la cadena es:
My text1
My text2
My text3
El resultado que quiero es este:
Array
(
[0] => My text1
[1] => My text2
[2] => My text3
)
php
string
line-breaks
Johan
fuente
fuente
s($yourString)->normalizeLineEndings()
está disponible con github.com/delight-im/PHP-Str (biblioteca bajo licencia MIT) que tiene muchos otros ayudantes de cadena útiles. Es posible que desee echar un vistazo al código fuente.Respuestas:
Puede usar la
explode
función, usando "\n
" como separador:Por ejemplo, si tiene este código:
Obtendría esta salida:
Tenga en cuenta que debe usar una cadena entre comillas dobles , por
\n
lo que en realidad se interpreta como un salto de línea.(Vea esa página del manual para más detalles).
fuente
\n
usted, puede usar la constante predefinidaPHP_EOL
.PHP_EOL
. Debes usarpreg_split("/\\r\\n|\\r|\\n/", $value)
.Siempre he usado esto con gran éxito:
(actualizado con el \ r final, gracias @LobsterMan)
fuente
\R
partidos\n
,\r
y\r\n
/\r?\n/
Un salto de línea se define de manera diferente en diferentes plataformas, \ r \ n, \ r o \ n.
Usando RegExp para dividir la cadena, puede unir los tres con \ R
Entonces para tu problema:
¡Eso coincidiría con los saltos de línea en Windows, Mac y Linux!
fuente
$array = preg_split ('/\R/', $string);
preg_split("/\r\n|\n|\r/", $string)
mejor opciónPHP ya conoce los caracteres de nueva línea del sistema actual. Solo usa la constante EOL.
fuente
trim()
las cadenas resultantes para eliminar cualquier espacio en blanco extraño.Una alternativa a la respuesta de Davids que es más rápida (mucho más rápido) es usar
str_replace
yexplode
.Lo que sucede es que,
dado que los saltos de línea pueden tener diferentes formas, I
str_replace
\ r \ n, \ n \ r y \ r con \ n en su lugar (y se conservan los originales \ n).Luego explota
\n
y tienes todas las líneas en una matriz.Hice un punto de referencia en el src de esta página y dividí las líneas 1000 veces en un bucle for y:
preg_replace
tomó un promedio de 11 segundosstr_replace & explode
tomó un promedio de aproximadamente 1 segundoMás detalles e información de referencia en mi forofuente
David: Gran dirección, pero te perdiste \ r. esto funcionó para mí:
fuente
No necesita funciones preg_ * ni patrones preg ni str_replace dentro, etc. para dividir con éxito una cadena en una matriz mediante nuevas líneas. En todos los escenarios, ya sea Linux / Mac o m $, esto servirá.
fuente
El "(en lugar de ') es bastante importante, de lo contrario, el salto de línea no se interpretará.
fuente
StackOverflow no me permitirá comentar la respuesta de hesselbom (no hay suficiente reputación), así que estoy agregando la mía ...
Esto funcionó mejor para mí porque también elimina el espacio en blanco inicial (segundo \ s *) y posterior (primero \ s *) automáticamente y también omite las líneas en blanco (el indicador PREG_SPLIT_NO_EMPTY).
- = OPCIONES = -
Si desea mantener el espacio en blanco inicial, simplemente elimine el segundo \ s * y conviértalo en un rtrim () en su lugar ...
Si necesita mantener líneas vacías, elimine el NULL (es solo un marcador de posición) y el marcador PREG_SPLIT_NO_EMPTY, así ...
O mantener tanto los espacios en blanco iniciales como las líneas vacías ...
No veo ninguna razón por la que quieras seguir dejando espacios en blanco, así que sugiero dejar el primer \ s * allí. Pero, si todo lo que quieres es dividir por una nueva línea (como sugiere el título), es ESTE simple (como lo menciona Jan Goyvaerts) ...
fuente
m
modificador no es realmente necesario, ¿verdad? ¿Eso no solo afecta^
y$
?Como han especificado otras respuestas, asegúrese de usar en
explode
lugar desplit
porque a partir de PHP 5.3.0split
está en desuso. es decir, lo siguiente NO es la forma en que desea hacerlo:LF = "\ n" = chr (10), CR = "\ r" = chr (13)
fuente
Para cualquiera que intente mostrar cronjobs en un crontab y se sienta frustrado sobre cómo separar cada línea, use explotar:
el uso de '\ n' no parece funcionar pero chr (10) funciona bien: D
Espero que esto le ahorre a alguien algunos dolores de cabeza.
fuente
'\n'
no funciona porque las secuencias de escape no se interpretan entre comillas simples, en su lugar debe usar comillas dobles: en"\n"
lugar de'n'
Leer php.net/manual/en/language.types.string.phppuedes usar esto:
fuente
Puede hacer un $ string = nl2br ($ string) para que su salto de línea se cambie a
De esta manera, no importa si el sistema usa \ r \ n o \ n o \ r
Luego puede alimentarlo en una matriz:
fuente
Esa es mi manera:
Esto también omitirá todas las líneas vacías.
fuente
matriz verdadera:
Insertar en línea:
fuente
Recogí esto en los documentos php:
fuente
Este método siempre funciona para mí:
fuente
Usar solo el paquete 'base' también es una solución para casos simples:
fuente
Usando cualquier carácter especial entre la cadena o el salto de línea
\n
usando PHP explotar podemos lograr esto.fuente