IT story

문자열을 배열에 넣는 방법, 줄 바꿈?

hot-time 2020. 5. 9. 09:19
반응형

문자열을 배열에 넣는 방법, 줄 바꿈?


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

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

내 텍스트 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)


큰 따옴표로 묶인 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(array("\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: Great direction, but you missed \r. this worked for me:

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

explode("\n", $str);

The " (instead of ') is quite important as otherwise, the line break wouln't get interpreted.


You don't need preg_* functions nor preg patterns nor str_replace within, etc .. in order to sucessfuly break a string into array by newlines. In all scenarios, be it Linux/Mac or m$, this will do.

<?php 

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

?>

PHP_EOL is a constant holding the line break character(s) used by the server platform.


StackOverflow will not allow me to comment on hesselbom's answer (not enough reputation), so I'm adding my own...

$array = preg_split('/\s*\R\s*/', trim($text), NULL, PREG_SPLIT_NO_EMPTY);

This worked best for me because it also eliminates leading (second \s*) and trailing (first \s*) whitespace automatically and also skips blank lines (the PREG_SPLIT_NO_EMPTY flag).

-= OPTIONS =-

If you want to keep leading whitespace, simply get rid of the second \s* and make it an rtrim() instead...

$array = preg_split('/\s*\R/', rtrim($text), NULL, PREG_SPLIT_NO_EMPTY);

If you need to keep empty lines, get rid of the NULL (it is only a placeholder) and PREG_SPLIT_NO_EMPTY flag, like so...

$array = preg_split('/\s*\R\s*/', trim($text));

Or keeping both leading whitespace and empty lines...

$array = preg_split('/\s*\R/', rtrim($text));

I don't see any reason why you'd ever want to keep trailing whitespace, so I suggest leaving the first \s* in there. But, if all you want is to split by new line (as the title suggests), it is THIS simple (as mentioned by Jan Goyvaerts)...

$array = preg_split('/\R/', $text);

<anti-answer>

As other answers have specified, be sure to use explode rather than split because as of PHP 5.3.0 split is deprecated. i.e. the following is NOT the way you want to do it:

$your_array = split(chr(10), $your_string);

LF = "\n" = chr(10), CR = "\r" = chr(13)

</anti-answer>

For anyone trying to display cronjobs in a crontab and getting frustrated on how to separate each line, use explode:

$output = shell_exec('crontab -l');
$cron_array = explode(chr(10),$output);

using '\n' doesnt seem to work but chr(10) works nicely :D

hope this saves some one some headaches.


you can use this:

 \str_getcsv($str,PHP_EOL);

You can do a $string = nl2br($string) so that your line break is changed to

<br />. 

This way it does not matter if the system uses \r\n or \n or \r

Then you can feed it into an array:

$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";
}

true array:

$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

Embed Online:

body, html, iframe { 
  width: 100% ;
  height: 100% ;
  overflow: hidden ;
}
<iframe src="https://ideone.com/vE1gst" ></iframe>


Picked this up in the php docs:

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

This method always works for me:

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

Using only the 'base' package is also a solution for simple cases:

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

That's my way:

$lines = preg_split('/[\r\n]+/', $db_text, NULL, PREG_SPLIT_NO_EMPTY);

This also will skip all empty lines too.


Using any special character between the string or line break \n using PHP explode we can achieve this.

참고URL : https://stackoverflow.com/questions/1483497/how-to-put-string-in-array-split-by-new-line

반응형