2009-08-18 13 views
6

Mam długi ciąg znaków w php, który nie zawiera nowych wierszy ('\ n').Długi ciąg PHP bez nowej linii

Moja konwencja kodowania nie zezwala na linie dłuższe niż 100 znaków.

Czy istnieje sposób, aby podzielić mój długi ciąg na wiele linii bez użycia. operator, który jest mniej wydajny - nie muszę dodawać 2 ciągów, ponieważ mogą one być podawane jako jeden ciąg znaków.

Dzięki!

Y

Odpowiedz

0

ze składnią heredoc (lub nowdoc, w zależności od potrzeb, sprawdź link dokumentacja):

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

Ale to jest do bani ... przepraszam :-)

+3

Problem z heredoc polega na tym, że będzie zawierał znaki nowego wiersza w ciągu znaków, które następnie należy usunąć, aby uzyskać "ciąg znaków, który nie zawiera znaków nowej linii" podanego w pytaniu. – Amber

+0

Możesz je rozebrać, tak jak pokazuje Lior. –

+0

Tak, jednak przyniosłoby to również wydajność, podobnie jak przy użyciu konkatenacji. – Amber

1

Ty może usunąć znaki nowej linii z ciągu znaków:

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

Powinieneś nadal używać operatora konkatenacji (.) dla takich rzeczy. Kara wydajności jest tu znikoma, jeśli używasz buforowania kodów (APC) i nie byłoby to w ogóle zauważalne, gdy podejmujesz dostęp do bazy danych i dodatkowej logiki (w tym pętli) do równania czasu wykonywania.

Aktualizacja:

swoja stronę poniżej odczytu. Powyższy wniosek nie jest łatwo dostępny w tekście, ale uważne badanie powinno wykazać, że jest ono ważne.

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

+0

W jaki sposób buforowanie pamięci kodu wpływa na szybkość łączenia ciągów? –

+0

Analizator składni traktowałby łańcuchy bez elementów dynamicznych jako jeden długi łańcuch, zrzucając operatorów konkatenacji. Wcześniej zagłębiałem się w ten temat. Zaktualizuje tę odpowiedź wraz z powiązanym artykułem, gdy uda mi się go znaleźć ponownie. –

2

Jest to właściwy kod, który rozwiązuje wszystkie problemy:

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

Jest on oparty na odpowiedź Lior Cohena, ale także paski znaki powrotu karetki "\ r".

Powiązane problemy