2009-08-18 12 views
6

Ho una lunga stringa in php che non contiene nuove righe ('\ n').Lunga stringa PHP senza nuova riga

La mia convenzione di codifica non consente righe superiori a 100 caratteri.

C'è un modo per suddividere la mia lunga stringa in più righe senza utilizzare il. operatore che è meno efficiente - Non ho bisogno di concatenare 2 stringhe in quanto possono essere fornite come una singola stringa .

Grazie!

Y

risposta

0

Con la sintassi heredoc (o nowdoc, a seconda delle esigenze, controllare il collegamento documentazione):

$multiline = <<<EOT 
My name is "$name". I am printing some $foo->foo. 
This should print a capital 'A': \x41 
EOT; 
$singleline = str_replace("\n","",$multiline); 

Ma che schifo ... mi dispiace :-)

+3

Il problema con heredoc è che includerà i caratteri di nuova riga nella stringa, che dovranno quindi essere eliminati per ottenere la "stringa che non contiene nuove righe" che la domanda specifica. – Amber

+0

È possibile eliminarli come mostrato da Lior –

+0

Sì, tuttavia ciò avrebbe anche un impatto sulle prestazioni proprio come farebbe la concatenazione. – Amber

1

È è possibile rimuovere i caratteri di nuova riga dalla stringa:

$myStr = " 
    here is my string 
    and it is spread across multiple lines 
    "; 
    $myStr = str_replace("\n", "", $myStr); 

Si dovrebbe utilizzare ancora l'operatore di concatenazione (.) per tali cose. La penalizzazione delle prestazioni qui è trascurabile se si utilizza il caching opcode (APC) e questo non sarebbe in alcun modo visibile durante l'accesso al DB e la logica aggiuntiva (inclusi i loop) nell'equazione del tempo di esecuzione.

Aggiornamento:

dare alla pagina sotto una lettura. La conclusione di cui sopra non è prontamente disponibile nel testo, ma un attento esame dovrebbe mostrare che è valido.

http://blog.golemon.com/2006/06/how-long-is-piece-of-string.html

+0

In che modo la cache opcode influisce sulla velocità della concatenazione delle stringhe? –

+0

Il parser considera le stringhe senza elementi dinamici come una stringa lunga, lasciando cadere gli operatori di concatenazione. Ho scavato in questo argomento qualche tempo fa. Aggiornerà questa risposta con l'articolo correlato una volta che riuscirò a trovarlo di nuovo. –

2

Questo è il codice giusto, che ha risolto tutti i problemi:

$myStr = " 
    here is my string 
    and it is spread across multiple lines 
    "; 
    $myStr = str_replace(array("\r","\n"), "", $myStr); 

Essa si basa sulla risposta di Lior Cohen, ma anche strisce restituisce "\ r" in carrozza.