Pregunta

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 a cabo un índice de la matriz.

Si la cadena es:

  

Mi texto1
  Mi texto2
  Mi text3

El resultado que quiero es la siguiente:

Array
(
    [0] => My text1
    [1] => My text2
    [2] => My text3
)
¿Fue útil?

Solución

Puede utilizar la función de explode , usando "\n" como separador:

$your_array = explode("\n", $your_string_from_db);

Por ejemplo, si usted tiene este pedazo de código:

$str = "My text1\nMy text2\nMy text3";
$arr = explode("\n", $str);
var_dump($arr);

Te obtener este resultado:

array
  0 => string 'My text1' (length=8)
  1 => string 'My text2' (length=8)
  2 => string 'My text3' (length=8)


Tenga en cuenta que usted tiene que utilizar un doble citada cadena , por lo que es en realidad \n interpretado como un salto de línea.
(ver que la página del manual para más detalles)

Otros consejos

Siempre he usado esto con gran éxito:

$array = preg_split("/\r\n|\n|\r/", $string);

(actualizado con la final \ r, gracias @LobsterMan)

Un salto de línea se define de manera diferente en diferentes plataformas, \ r \ n, \ o r \ n.

El uso de RegExp a dividir la cadena puede hacer coincidir los tres con \ R

Así que para su problema:

$array = preg_split ('/$\R?^/m', $string);

Esto coincidiría con saltos de línea en Windows, Mac y Linux!

PHP ya sabe carácter de nueva línea del sistema actual (s). Sólo tiene que utilizar la constante de EOL.

explode(PHP_EOL,$string)

Una alternativa a Davids responder que es más rápido (mucho más rápido) es utilizar str_replace y explode.

$arrayOfLines = explode("\n",
                    str_replace(array("\r\n","\n\r","\r"),"\n",$str)
            );

Lo que sucede es:
Desde saltos de línea pueden venir en diferentes formas, yo str_replace \ r \ n \ n \ r, \ r \ n en su lugar (y original \ n se conservan).
Luego explotar en \n y tiene todas las líneas en una matriz.

Hice un punto de referencia en el src de esta página y dividir las líneas de 1000 veces en un bucle y:
preg_replace tuvo un promedio de 11 segundos
str_replace & explode tuvo un promedio de aproximadamente 1 segundo

Más detalle y bencmark información sobre mi foro

David: Gran dirección, pero se ha perdido el \ r. Esto funcionó para mí:

$array = preg_split("/(\r\n|\n|\r)/", $string);
explode("\n", $str);

El "(en lugar de ') es bastante importante como lo contrario, el salto de línea wouln't obtener interpretado.

No es necesario funciones preg_ * ni patrones preg ni str_replace dentro, etc .. con el fin de sucessfuly romper una cadena en una matriz mediante nuevas líneas. En todos los escenarios, ya sea Linux / Mac o m $, esto va a hacer.

<?php 

 $array = explode(PHP_EOL, $string);
 // ...  
 $string = implode(PHP_EOL, $array);

?>
  

PHP_EOL es una constante que sostiene el personaje (s) salto de línea utilizada por la plataforma de servidor.

stackoverflow no me permite hacer comentarios sobre la respuesta de hesselbom (no hay suficiente reputación), así que estoy añadiendo mi propia ...

$array = preg_split('/\s*\R\s*/', trim($text), NULL, PREG_SPLIT_NO_EMPTY);

Esto funcionó mejor para mí, ya que también elimina líder (segunda \ s *) y de salida (primera \ s *) espacios en blanco de forma automática y también se salta líneas en blanco (la bandera PREG_SPLIT_NO_EMPTY).

- = OPCIONES = -

Si desea mantener el espacio al principio, sólo tiene que deshacerse de la segunda \ s * y convertirlo en un rtrim () en su lugar ...

$array = preg_split('/\s*\R/', rtrim($text), NULL, PREG_SPLIT_NO_EMPTY);

Si usted necesita para mantener las líneas vacías, deshacerse de la NULL (que es sólo un marcador de posición) y la bandera PREG_SPLIT_NO_EMPTY, al igual que ...

$array = preg_split('/\s*\R\s*/', trim($text));

O manteniendo las dos líneas principales de espacio en blanco y vacíos ...

$array = preg_split('/\s*\R/', rtrim($text));

No veo ninguna razón por la que le quiere nunca para mantener espacios en blanco, por lo que sugiero que abandona la primera \ s * en ese país. Pero, si lo que quieres es dividir por la nueva línea (como sugiere el título), es esta simple (como se ha mencionado por Jan Goyvaerts) ...

$array = preg_split('/\R/', $text);
<anti-answer>

Como han especificado otras respuestas, asegúrese de usar explode en lugar de split porque a partir de PHP 5.3.0 split está en desuso. es decir, el siguiente es no la forma en que desea hacerlo:

$your_array = split(chr(10), $your_string);

LF = "\ n" = CHR (10), CR = "\ r" = CHR (13)

</anti-answer>

Para cualquier persona que intenta mostrar cronjobs en un crontab y frustrado sobre cómo separar cada línea, utilice explotar:

$output = shell_exec('crontab -l');
$cron_array = explode(chr(10),$output);

usando '\ n' no se parece a trabajar pero CHR (10) funciona muy bien: D

esperanza esto ahorra un poco de algunos dolores de cabeza.

puede utilizar esto:

 \str_getcsv($str,PHP_EOL);

Usted puede hacer una $ cadena = nl2br ($ cadena) para que su salto de línea se cambia a

<br />. 

De esta manera, no importa si el sistema utiliza \ r \ no \ no \ r

A continuación, se puede alimentar en una matriz:

$array = explode("<br />", $string);
$str = "My text1\nMy text2\nMy text3";
$arr = explode("\n", $str);

foreach ($arr as $line_num => $line) {
    echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n";
}

true array:

$str = "My text1\nMy text2\nMy text3";
$arr = explode("\n", $str);

$array = array(); // inisiasi variable array in format array

foreach ($arr as $line) { // loop line by line and convert into array
    $array[] = $line;
};

print_r($array); // display all value

echo $array[1]; // diplay index 1

Insertar línea:

body, html, iframe { 
  width: 100% ;
  height: 100% ;
  overflow: hidden ;
}
<iframe src="https://ideone.com/vE1gst" ></iframe>

abordó esta cuestión en la documentación de PHP:

<?php
  // split the phrase by any number of commas or space characters,
  // which include " ", \r, \t, \n and \f

  $keywords = preg_split("/[\s,]+/", "hypertext language, programming");
  print_r($keywords);
?>

Este método siempre funciona para mí:

$uniquepattern="gd$#%@&~#"//Any set of characters which you dont expect to be present in user input $_POST['text'] better use atleast 32 charecters.
$textarray=explode($uniquepattern,str_replace("\r","",str_replace("\n",$uniquepattern,$_POST['text'])));

Usando sólo el paquete de 'base' es también una solución para los casos simples:

> s <- "a\nb\rc\r\nd"
> l <- strsplit(s,"\r\n|\n|\r")
> l  # the whole list...
[[1]]
[1] "a" "b" "c" "d"
> l[[1]][1] # ... or individual elements
[1] "a"
> l[[1]][2]
[1] "b"
> fun <- function(x) c('Line content:', x) # handle as you wish
> lapply(unlist(l), fun)

Esa es mi manera:

$lines = preg_split('/[\r\n]+/', $db_text, NULL, PREG_SPLIT_NO_EMPTY);

Esto también se saltará todas las líneas vacías también.

El uso de cualquier carácter especial entre la cuerda o línea \n ruptura usando PHP estallan podemos lograr esto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top