StackOverflow non mi permetterà di commentare la risposta di hesselbom (non abbastanza reputazione), quindi sto aggiungendo il mio ...
$array = preg_split('/\s*\R\s*/', trim($text), NULL, PREG_SPLIT_NO_EMPTY);
Questo ha funzionato meglio per me perché elimina automaticamente anche gli spazi iniziali (second \ s *) e finali (first \ s *) e salta anche le righe vuote (il flag PREG_SPLIT_NO_EMPTY).
- = OPZIONI = -
Se vuoi mantenere uno spazio bianco in testa, devi semplicemente sbarazzarti del secondo \ s * e renderlo un rtrim () invece ...
$array = preg_split('/\s*\R/', rtrim($text), NULL, PREG_SPLIT_NO_EMPTY);
Se devi mantenere le righe vuote, elimina il flag NULL (è solo un segnaposto) e PREG_SPLIT_NO_EMPTY, in questo modo ...
$array = preg_split('/\s*\R\s*/', trim($text));
O mantenendo sia gli spazi bianchi principali sia le linee vuote ...
$array = preg_split('/\s*\R/', rtrim($text));
Non vedo alcun motivo per cui vorresti mai continuare a trascinare spazi bianchi, quindi suggerisco di lasciare il primo \ s * lì dentro. Ma, se tutto ciò che vuoi è dividere per nuova riga (come suggerisce il titolo), è QUESTO semplice (come menzionato da Jan Goyvaerts) ...
$array = preg_split('/\R/', $text);