2013-05-13 12 views
7

Sto cercando di capire come convertire html textarea in array PHP,TextArea Array con PHP

ho usato un modulo con POST per fornire la query allo script php, e il file php li sta ottenendo con la seguente riga:

$ids = array($_POST['ids']); 

Inutile dire che mette tutto in una sola riga

Array ([0] => line1 line2 line3 line4) 

ho bisogno i risultati finali di sostituire questo:

$numbers = array(
"line1", 
"line2", 
"line3", 
"line4" 
); 

Quale sarebbe l'approccio migliore per dividerlo e ri-analizzarlo?

+1

Vorrei suggerire di usare 'preg_split()' con ' # \ r \ n |? \ n # '. – HamZa

risposta

24

Utilizzando un esplodere su \n è un modo corretto per ottenere nuove linee. tieni a mente che su alcune piattaforme la fine della linea è in realtà inviata da \r\n, quindi l'esplosione dello \n potrebbe lasciarti con dati extra alla fine di ogni riga.

Il mio suggerimento sarebbe rimuovere lo \r prima di esplodere, in modo da non dover scorrere l'intero array per tagliare il risultato. Come ultimo miglioramento, non sai che esiste effettivamente un $_POST['ids'], quindi controlla sempre prima.

<? 
$input = isset($_POST['ids'])?$_POST['ids']:""; 

//I dont check for empty() incase your app allows a 0 as ID. 
if (strlen($input)==0) { 
    echo 'no input'; 
    exit; 
} 

$ids = explode("\n", str_replace("\r", "", $input)); 
?> 
+0

+1, risposta migliore IMO. – enenen

+0

Risposta eccezionale! Grazie mille. –

-1

Prova con explode function:

$ids = $_POST['ids']; // not array($_POST['ids']) 
$ids = explode(" ", $ids); 

Il primo parametro è il delimiter che potrebbe essere lo spazio, carattere di nuova riga \r\n, virgola, due punti ecc secondo la vostra stringa dalla textarea (non è chiaro dalla domanda se i valori sono separati da spazi o da nuove linee).

0

Se textarea deve semplicemente interruzioni di riga per ogni voce poi mi piacerebbe fare qualcosa di simile:

$ids = nl2br($_POST['ids'); 
$ids = explode('<br />',$ids); //or just '<br>' depending on what nl2br uses. 
+0

sebbene 'nl2br' identificherà correttamente tutte le nuove linee, lasciandole anche dentro. Come afferma manualmente inserisce il tag '
' prima dei nuovi caratteri lineari, quindi si otterrebbero dati extra su ogni elemento dell'array che non è utile per l'ID –

+0

l'unico problema è lo spazio bianco extra su ogni riga se è presente - l'assetto lo ordinerà. –

4

avrei fatto l'esplodere di Hugo in questo modo:

$ids = explode(PHP_EOL, $input); 

manuali Predefined Constants

Solo i miei due centesimi ...

+4

'PHP_EOL' restituisce il finale corretto per il server. Se un utente MAC invia il testo a un server Windows, le terminazioni di riga non corrisponderanno. –

0

Utilizzare questa

 
$new_array = array_values(array_filter(explode(PHP_EOL, $input))); 

explode -> convertire textarea di array PHP (che le linee di divisione dalla nuova linea)
array_filter -> rimuovere le righe vuote da serie
array_values -> ripristinare chiavi di serie

+0

Come 'Hugo Delsing' ha detto:' PHP_EOL' restituisce il termine corretto per il server. Se un utente MAC invia il testo a un server Windows, le terminazioni di riga non corrisponderanno. –