새로운 라인으로 분할 된 배열에 문자열을 넣는 방법은 무엇입니까?
-
18-09-2019 - |
문제
내 데이터베이스에 줄이 끊어진 문자열이 있습니다. 해당 문자열을 배열로 변환하고 새로운 라인마다 배열에서 하나의 인덱스 장소를 점프합니다.
문자열이 다음과 같은 경우
내 텍스트 1
내 텍스트 2
내 텍스트 3
내가 원하는 결과는 이것입니다.
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)
a를 사용해야합니다 이중 인용 문자열, 그래서 \n
실제로 라인 브레이크로 해석됩니다.
(자세한 내용은 해당 매뉴얼 페이지를 참조하십시오)
다른 팁
나는 항상 이것을 큰 성공으로 사용했습니다.
$array = preg_split("/\r\n|\n|\r/", $string);
(최종 r, 감사합니다 @lobsterman)
라인 브레이크는 r n, r 또는 n에 따라 다르게 정의됩니다.
regexp를 사용하여 문자열을 분할하여 세 가지를 모두 r과 일치시킬 수 있습니다.
그래서 당신의 문제를 위해 :
$array = preg_split ('/$\R?^/m', $string);
그것은 Windows, Mac 및 Linux에서 라인 브레이크와 일치합니다!
PHP는 이미 현재 시스템의 Newline 캐릭터를 알고 있습니다. EOL 상수 만 사용하십시오.
explode(PHP_EOL,$string)
대안 다윗이 대답합니다 더 빠른 (더 빠른) 사용하는 것입니다. str_replace
그리고 explode
.
$arrayOfLines = explode("\n",
str_replace(array("\r\n","\n\r","\r"),"\n",$str)
);
일어나는 일은 다음과 같습니다.
라인 브레이크는 다른 형태로 올 수 있기 때문에 나는 str_replace
r n, n r 및 r 대신 n 대신 n이 보존됩니다).
그런 다음 폭발합니다 \n
그리고 당신은 배열에 모든 줄이 있습니다.
이 페이지의 SRC에서 벤치 마크를 수행하고 Loop의 경우 1000 번 줄을 분할했습니다.
preg_replace
11 초의 AVG가 걸렸습니다
str_replace & explode
약 1 초의 AVG를 취했습니다
자세한 내용과 Bencmark 정보 내 포럼
David : 좋은 방향이지만 r을 놓쳤습니다. 이것은 나를 위해 효과가있었습니다.
$array = preg_split("/(\r\n|\n|\r)/", $string);
explode("\n", $str);
"(대신)는 그렇지 않으면 매우 중요합니다. 라인 브레이크는 해석되지 않습니다.
당신은 preg_* 함수 나 preg 패턴이나 str_replace 내부 등이 필요하지 않습니다. 모든 시나리오에서 Linux/Mac 또는 M $이면됩니다.
<?php
$array = explode(PHP_EOL, $string);
// ...
$string = implode(PHP_EOL, $array);
?>
php_eol 서버 플랫폼에서 사용하는 라인 브레이크 문자를 보유하는 일정한 상태입니다.
StackoverFlow는 Hesselbom의 답변에 대해 언급 할 수 없을 것입니다 (명성이 충분하지 않음).
$array = preg_split('/\s*\R\s*/', trim($text), NULL, PREG_SPLIT_NO_EMPTY);
이것은 또한 선행 (두 번째 s*) 및 후행 (첫 번째 s*) 공백을 자동으로 제거하고 빈 줄 (preg_split_no_empty 플래그)을 건너 뜁니다.
-= 옵션 =-
계속해서 공백을 계속하려면 두 번째 s*를 제거하고 대신 rtrim ()로 만드십시오 ...
$array = preg_split('/\s*\R/', rtrim($text), NULL, PREG_SPLIT_NO_EMPTY);
빈 줄을 유지 해야하는 경우 Null (자리 표시 자일뿐입니다)과 preg_split_no_empty 플래그를 제거하십시오.
$array = preg_split('/\s*\R\s*/', trim($text));
또는 선행 공백과 빈 라인을 모두 유지 ...
$array = preg_split('/\s*\R/', rtrim($text));
나는 당신이 계속 우선 공백을 계속하고 싶은 이유가 없으므로 첫 번째 s*를 거기에 두는 것이 좋습니다. 그러나, 당신이 원하는 것은 새로운 라인으로 나누는 것입니다 (제목에서 알 수 있듯이), 그것은 단순합니다 (Jan Goyvaerts가 언급 한 것처럼) ...
$array = preg_split('/\R/', $text);
<anti-answer>
다른 답변이 지정된 것처럼 사용하십시오. explode
보다는 split
PHP 5.3.0 기간 동안 split
더 이상 사용되지 않습니다. 즉, 다음은입니다 아니다 당신이하고 싶은 방식 :
$your_array = split(chr(10), $your_string);
lf = " n"= chr (10), cr = " r"= chr (13)
</anti-answer>
크론 탭에 크론 조브를 표시하고 각 라인을 분리하는 방법에 대해 좌절하는 사람은 다음을 사용하십시오.
$output = shell_exec('crontab -l');
$cron_array = explode(chr(10),$output);
' n'사용은 작동하지 않는 것 같지만 chr (10)는 잘 작동합니다.
이것이 약간의 두통을 저장하기를 바랍니다.
당신은 이것을 사용할 수 있습니다 :
\str_getcsv($str,PHP_EOL);
라인 브레이크가
<br />.
이 방법으로 시스템이 r n 또는 n 또는 r을 사용하는지 여부는 중요하지 않습니다.
그런 다음 배열로 공급할 수 있습니다.
$array = explode("<br />", $string);
$str = "My text1\nMy text2\nMy text3";
$arr = explode("\n", $str);
foreach ($arr as $line_num => $line) {
echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n";
}
진정한 배열 :
$str = "My text1\nMy text2\nMy text3";
$arr = explode("\n", $str);
$array = array(); // inisiasi variable array in format array
foreach ($arr as $line) { // loop line by line and convert into array
$array[] = $line;
};
print_r($array); // display all value
echo $array[1]; // diplay index 1
온라인 임베드 :
body, html, iframe {
width: 100% ;
height: 100% ;
overflow: hidden ;
}
<iframe src="https://ideone.com/vE1gst" ></iframe>
PHP 문서에서 이것을 선택했습니다.
<?php
// split the phrase by any number of commas or space characters,
// which include " ", \r, \t, \n and \f
$keywords = preg_split("/[\s,]+/", "hypertext language, programming");
print_r($keywords);
?>
이 방법은 항상 나에게 작동합니다.
$uniquepattern="gd$#%@&~#"//Any set of characters which you dont expect to be present in user input $_POST['text'] better use atleast 32 charecters.
$textarray=explode($uniquepattern,str_replace("\r","",str_replace("\n",$uniquepattern,$_POST['text'])));
'기본'패키지 만 사용하는 것도 간단한 경우에 대한 솔루션입니다.
> s <- "a\nb\rc\r\nd"
> l <- strsplit(s,"\r\n|\n|\r")
> l # the whole list...
[[1]]
[1] "a" "b" "c" "d"
> l[[1]][1] # ... or individual elements
[1] "a"
> l[[1]][2]
[1] "b"
> fun <- function(x) c('Line content:', x) # handle as you wish
> lapply(unlist(l), fun)
그건 내 방법:
$lines = preg_split('/[\r\n]+/', $db_text, NULL, PREG_SPLIT_NO_EMPTY);
이것은 또한 모든 빈 줄도 건너 뜁니다.
문자열 또는 라인 브레이크 사이의 특수 문자 사용 \n
PHP 폭발을 사용하여 우리는 이것을 달성 할 수 있습니다.