[php] 배열에 문자열을 새 줄로 나눌 수 있습니까?

데이터베이스에 줄 바꿈이있는 문자열이 있습니다. 해당 문자열을 배열로 변환하고 모든 줄마다 배열에서 한 인덱스 위치로 이동합니다.

문자열이 다음과 같은 경우 :

My text1
My text2
My text3

내가 원하는 결과는 다음과 같습니다.

Array
(
    [0] => My text1
    [1] => My text2
    [2] => My text3
)



답변

explode\n“를 구분 기호로 사용하여이 기능을 사용할 수 있습니다 .

$your_array = explode("\n", $your_string_from_db);

예를 들어,이 코드가 있다면 :

$str = "My text1\nMy text2\nMy text3";
$arr = explode("\n", $str);
var_dump($arr);

이 출력을 얻을 수 있습니다 :

array
  0 => string 'My text1' (length=8)
  1 => string 'My text2' (length=8)
  2 => string 'My text3' (length=8)

큰 따옴표로 묶인 string
을 사용해야 하므로 \n실제로 줄 바꿈으로 해석됩니다.

(자세한 내용은 해당 매뉴얼 페이지를 참조하십시오.)


답변

나는 항상 이것을 큰 성공으로 사용했습니다.

$array = preg_split("/\r\n|\n|\r/", $string);

(@LobsterMan 덕분에 최종 \ r로 업데이트 됨)


답변

줄 바꿈은 \ r \ n, \ r 또는 \ n 플랫폼마다 다르게 정의됩니다.

RegExp를 사용하여 문자열을 분할하면 세 가지를 모두 \ R과 일치시킬 수 있습니다

그래서 당신의 문제를 위해 :

$array = preg_split ('/$\R?^/m', $string);

그것은 Windows, Mac 및 Linux의 줄 바꿈과 일치합니다!


답변

PHP는 이미 현재 시스템의 개행 문자를 알고 있습니다. EOL 상수를 사용하십시오.

explode(PHP_EOL,$string)


답변

에 대한 대안 다비즈 응답 (빠른 방법) 빠른 사용하는 것입니다 str_replaceexplode.

$arrayOfLines = explode("\n",
                    str_replace(["\r\n","\n\r","\r"],"\n",$str)
            );

무슨 일이 일어나고 있습니다 :
줄 바꿈은 다른 형태로 나올 수 있기 때문에 str_replace대신 \ n을 사용하여 \ r \ n, \ n \ r 및 \ r을 사용할 수 있습니다 (원래 \ n은 유지됩니다).
그런 다음 폭발하여 \n모든 줄을 배열로 만듭니다.

나는이 페이지의 src에서 벤치 마크를하고 for 루프에서 1000 번 라인을 나누고
preg_replace평균 11 초가
str_replace & explode걸렸다. 평균 약 1 초가 걸렸다.

내 포럼에 대한 자세한 내용과 벤치 마크 정보


답변

David : 좋은 방향이지만 \ r을 놓쳤습니다. 이것은 나를 위해 일했다 :

$array = preg_split("/(\r\n|\n|\r)/", $string);


답변

줄 바꿈으로 문자열을 배열로 나누기 위해 preg_ * 함수, preg 패턴 또는 str_replace 등이 필요하지 않습니다. 모든 시나리오에서 Linux / Mac이든 m $이든 상관 없습니다.

<?php

 $array = explode(PHP_EOL, $string);
 // ...  
 $string = implode(PHP_EOL, $array);

?>

PHP_EOL 은 서버 플랫폼에서 사용하는 줄 바꿈 문자를 보유하는 상수입니다.