Domanda

ho una stringa con interruzioni di riga nel mio database. Voglio convertire che stringa in un array, e per ogni nuova linea, saltare posto un indice nella matrice.

Se la stringa è:

  

Il mio text1
  Il mio TEXT2
  Il mio text3

Il risultato che voglio è questa:

Array
(
    [0] => My text1
    [1] => My text2
    [2] => My text3
)
È stato utile?

Soluzione

È possibile utilizzare la funzione explode , l'utilizzo di "\n" come separatore:

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

Per esempio, se si dispone di questo pezzo di codice:

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

Si potrebbe ottenere questo output:

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


Si noti che è necessario utilizzare un doppio citato stringa , così \n è effettivamente interpretata come una linea-break.
(si veda la pagina per ulteriori dettagli)

Altri suggerimenti

Ho sempre usato questo con grande successo:

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

(aggiornato con la finale \ r, grazie @LobsterMan)

Un'interruzione di riga viene definito in modo diverso su piattaforme diverse, \ r \ n, \ r \ n.

Utilizzando RegExp per dividere la stringa si può abbinare tutti e tre con \ R

Quindi, per il vostro problema:

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

Questo sarebbe abbinare interruzioni di riga su Windows, Mac e Linux!

PHP sa già carattere di nuova riga del sistema attuale (s). Basta usare la costante EOL.

explode(PHP_EOL,$string)

Un'alternativa a Davids rispondere che è più veloce (modo più veloce) è quello di utilizzare str_replace e explode.

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

Quello che sta succedendo è:
Dal momento che le interruzioni di linea può venire in forme diverse, ho str_replace \ r \ n \ n \ r, e \ r \ n invece (originale \ ne sono conservate).
Poi esplodere \n e si dispone di tutte le linee di un array.

Ho fatto un punto di riferimento sul src di questa pagina e dividere le linee di 1000 volte in un ciclo for e:
preg_replace ha preso una media di 11 secondi
str_replace & explode ha preso una media di circa 1 secondo

Maggiori dettagli e informazioni bencmark mio forum

David: Grande direzione, ma vi siete persi \ r. questo ha funzionato per me:

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

L ' "(invece di ') è molto importante in quanto in caso contrario, l'interruzione di riga wouln't ottenere interpretato.

Non hai bisogno di funzioni preg_ * né modelli né preg str_replace all'interno, ecc .. in modo da sucessfuly rompere una stringa in array a capo. In tutti gli scenari, sia esso Linux / Mac o m $, questo farà.

<?php 

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

?>
  

PHP_EOL è una costante che tiene il carattere di interruzione di riga (s) utilizzato dalla piattaforma server.

StackOverflow non mi permette di commentare la risposta di Hesselbom (non abbastanza reputazione), quindi sto aggiungendo la mia ...

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

Questo ha funzionato meglio per me perché elimina anche leader (secondo \ s *) e finali (prima \ s *) gli spazi in modo automatico e anche salta righe vuote (la bandiera PREG_SPLIT_NO_EMPTY).

- = OPTIONS = -

Se si desidera mantenere gli spazi restanti, semplicemente sbarazzarsi del secondo \ s * e renderlo un rtrim () invece ...

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

Se avete bisogno di mantenere le linee vuote, sbarazzarsi del NULL (è solo un segnaposto) e PREG_SPLIT_NO_EMPTY la bandiera, in questo modo ...

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

o mantenere entrambe le linee principali spazi bianchi e vuoti ...

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

Non vedo alcuna ragione per cui ci si mai voglia di mantenere spazio bianco in coda, quindi suggerisco di lasciare la prima \ s * in là. Ma, se invece si è alla raggruppati per nuova linea (come suggerisce il titolo), è questa semplice (come detto da Jan Goyvaerts) ...

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

Come altre risposte hanno specificato, assicurarsi di utilizzare explode piuttosto che split perché come di PHP 5.3.0 split è deprecato. vale a dire il seguente è non il modo in cui si desidera farlo:

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

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

</anti-answer>

Per chiunque cercando di visualizzare cronjobs in un crontab e frustrato su come separare ogni linea, utilizzare esplodere:

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

usando '\ n' doesnt sembra funzionare ma chr (10) funziona bene: D

speranza questo consente di risparmiare un po 'di un qualche mal di testa.

è possibile utilizzare questo:

 \str_getcsv($str,PHP_EOL);

Si può fare un $ string = nl2br ($ string) in modo che la vostra interruzione di linea viene modificato in

<br />. 

In questo modo non importa se il sistema utilizza \ r \ n \ n o \ r

Quindi è possibile alimentarlo in un array:

$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";
}

vera matrice:

$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

Embed in linea:

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

Abbiamo scelto questo nel docs 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);
?>

Questo metodo funziona sempre per me:

$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'])));

Utilizzando solo il pacchetto 'base' è anche una soluzione per casi semplici:

> 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)

Questo è il mio modo:

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

Questo anche salterà tutte le righe vuote troppo.

L'utilizzo di qualsiasi carattere speciale tra la stringa o linea di rottura \n utilizzando PHP explode possiamo raggiungere questo obiettivo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top