2009-08-18 2 views
6

필자는 php에 긴 줄이 있는데 여기에는 새로운 줄 ('\ n')이 포함되지 않습니다.개행 문자가없는 PHP 긴 문자열

필자의 코딩 규칙에서는 100 자보다 긴 행을 사용할 수 없습니다.

를 사용하지 않고 긴 문자열을 여러 줄로 나눌 수있는 방법이 있습니까? 연산자가 덜 효율적입니다 - 나는 concchar 문자열을 단일 문자열로 지정할 수 있기 때문에 2 문자열을 연결할 필요가 없습니다.

감사합니다.

Y

답변

0
heredoc 구문을

(또는 nowdoc, 필요에 따라 문서의 링크 확인) :

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

을하지만이

+3

heredoc의 문제는 문자열에 줄 바꿈 문자를 포함한다는 것입니다.이 줄 바꿈 문자는 질문에 지정된 "줄 바꿈을 포함하지 않는 문자열"을 얻기 위해 제거해야합니다. – Amber

+0

Lior이 –

+0

으로 표시되면 스트립 처리 할 수 ​​있습니다. 그렇지만 연결을 사용할 때와 마찬가지로 성능이 저하됩니다. – Amber

1

:-) 미안 ... 짜증 당신 문자열에서 개행 문자를 제거 할 수 있습니다.

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

그런 일에 대해서는 여전히 연결 연산자 (.)를 사용합니다. opcode 캐싱 (APC)을 사용한다면 성능상의 불이익은 무시할 만합니다. DB 액세스와 루프 (루프 포함)를 런타임에 적용 할 때 눈에 띄는 것은 없습니다.

업데이트 :

읽기 아래의 페이지를 지정합니다. 위의 결론은 본문에서 쉽게 구할 수 없지만 신중한 검토에서 그것이 유효 함을 보여 주어야합니다.

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

+0

opcode 캐싱이 문자열 연결 속도에 어떤 영향을 줍니까? –

+0

파서는 동적 요소가없는 문자열을 하나의 긴 문자열로 처리하여 연결 연산자를 삭제합니다. 나는이 주제를 오래 전에 파헤 쳤다. 내가 다시 찾을 수있게되면 관련 기사로이 답변을 업데이트 할 것입니다. –

2

이 모든 문제를 해결 올바른 코드입니다 : 그것은 리 오르 코헨의 대답을 기반으로

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

는뿐만 아니라 캐리지 리턴 \ "R"를 제거합니다.

관련 문제