2012-02-01 9 views
29

In PHP 5.3 c'è un nice function che sembra fare quello che voglio:Ottenere prima riga di una stringa in PHP

strstr(input,"\n",true) 

Purtroppo, il server esegue PHP 5.2.17 e il terzo parametro opzionale di strstr è non disponibile. C'è un modo per raggiungere questo risultato nelle versioni precedenti in un'unica riga?

+0

Si potrebbe voler usare virgolette doppie che '\ n'. Quando l'ho avuto tra virgolette singole durante la creazione di contenuto di posta elettronica, '\ n' è appena uscito come caratteri normali invece del carattere di fine riga. – Svish

+0

perché la restrizione "una riga"? – misterjinx

risposta

84

qui si va

$str = strtok($input, "\n"); 

strtok() Documentation

+0

Il metodo più veloce –

+0

soluzione di sudore! – misterjinx

+0

Non direi che è il più veloce (E non mi preoccuperei affatto di confrontare la velocità) ma è apparentemente * il più breve * –

4
$first_line = substr($fulltext, 0, strpos($fulltext, "\n")); 

o qualcosa da fare farebbe il trucco. Brutto, ma praticabile.

3

provare

substr(input, 0, strpos(input, "\n")) 
1

provare questo:

substr($text, 0, strpos($text, chr(10)) 
0

È possibile utilizzare strpos combinato con substr. Prima trovi la posizione in cui si trova il personaggio e poi restituisci quella parte della stringa.

$pos = strpos(input, "\n"); 

if ($pos !== false) { 
echo substr($input, 0, $pos); 
} else { 
echo 'String not found'; 
} 

È questo quello che vuoi?

l.e. Non si è notato il limite di una riga, quindi non è applicabile come è. È possibile combinare le due funzioni in una sola riga come suggerito da altri oppure è possibile creare una funzione personalizzata che verrà chiamata in una riga di codice, come desiderato. La tua scelta.

+0

non one-liner – kinokijuf

+0

limitazione di una riga? c'è una ragione per questo?sai che puoi sempre creare la tua funzione che può essere chiamata più tardi in una sola riga di codice, giusto? – misterjinx

2

echo str_replace(strstr($input, '\n'),'',$input);

1
list($line_1, $remaining) = explode("\n", $input, 2); 

rende facile per ottenere la linea superiore e il contenuto lasciato alle spalle se si voleva ripetere l'operazione. Altrimenti usa il substr come suggerito.

+0

Puoi omettere il rimanente anche se –

+0

Potresti, ma come ho dichiarato se volevi le prime X righe usando il mio originale "elenco ($ line_1, $ rimanente) = esplode (" \ n ", $ input, 2);" consentirebbe un'azione ripetitiva. Con questa modifica il mio post è piuttosto privo di significato !? Sembra proprio una modifica molto strana da fare ... –

+0

Beh, per le chiamate successive strtok sarebbe ancora meglio. –

9

È tardi, ma si potrebbe usare esplodere.

<?php 
$lines=explode("\n", $string); 
echo $lines['0']; 
?> 
+3

Perché in questo esempio si usano chiavi di stringa? Dovrebbe essere '$ lines [0]'? – trejder

+1

Nota: se è necessaria solo la prima riga, questo è inefficiente. Per esempio. se '$ stringa' è un centinaio di megabyte e la prima riga è solo alcuni byte, questa soluzione spreca un centinaio di megabyte di memoria e il tuo script potrebbe anche essere terminato quando raggiungi il limite di memoria. –

+0

'current (explode (" \ n ", $ string));' accorcia questo e risolve il problema della variabile intermedia e dello spreco di memoria. – billynoah

1

non dipendenti dal tipo di simbolo di interruzione di linea.

(($pos=strpos($text,"\n"))!==false) || ($pos=strpos($text,"\r")); 

$firstline = substr($text,0,(int)$pos); 

$ Firstline ora contiene prima riga da un testo o una stringa vuota, se non simboli di interruzione trovate (o rompere simbolo è un primo simbolo nel testo).

0

Molte volte la manipolazione delle stringhe affronta le vars che iniziano con una riga vuota, quindi non dimenticare di valutare se vuoi veramente prendere in considerazione le linee bianche all'inizio e alla fine della stringa, oppure tagliarle. Inoltre, per evitare errori del sistema operativo, utilizzare PHP_EOL utilizzato per trovare il carattere di nuova riga in un modo compatibile con più piattaforme (When do I use the PHP constant "PHP_EOL"?).

$lines = explode(PHP_EOL, trim($string)); 
echo $lines[0]; 
Problemi correlati