代码之家  ›  专栏  ›  技术社区  ›  Johan

如何将字符串放入数组中,按新行拆分?

  •  184
  • Johan  · 技术社区  · 16 年前

    我的数据库中有一个带有换行符的字符串。我想把这个字符串转换成一个数组,对于每一行,在数组中跳转一个索引位置。

    如果字符串是:

    我的文本1
    我的课文2
    我的课文3

    我想要的结果是:

    Array
    (
        [0] => My text1
        [1] => My text2
        [2] => My text3
    )
    
    18 回复  |  直到 7 年前
        1
  •  246
  •   Pascal MARTIN    16 年前

    您可以使用 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)
    


    请注意,您必须使用 double-quoted string ,所以 \n 实际上被解释为换行符。
    (更多详情请参见手册页)

        2
  •  274
  •   Wouter J schlicki    13 年前

    我一直成功地使用它:

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

    (更新为最终版本,谢谢@lobsterman)

        3
  •  271
  •   hesselbom    14 年前

    换行符在不同的平台上定义不同\r\n、\r或\n。

    使用regexp拆分字符串,您可以使用

    所以对于你的问题:

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

    这将匹配Windows、Mac和Linux上的换行符!

        4
  •  32
  •   voidstate    13 年前

    PHP已经知道当前系统的换行符。只需使用EOL常量。

    explode(PHP_EOL,$string)
    
        5
  •  26
  •   Community Mohan Dere    9 年前

    替代 Davids answer 使用哪个更快(更快) str_replace explode .

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

    现在发生的是:
    因为换行符可以有不同的形式, 斯特拉替代 \ r\n、\n\r和\r替换为\n(保留原始文件)。
    然后爆炸 \n 所有的线都在一个数组中。

    我在这个页面的SRC上做了一个基准测试,并在for循环中拆分了1000行,并且:
    preg_replace 平均11秒
    str_replace & explode 平均1秒钟

    更多详细信息和bencmark信息 my forum

        6
  •  17
  •   LobsterMan    13 年前

    大卫:很好的方向,但你错过了。这对我很有用:

    $array = preg_split("/(\r\n|\n|\r)/", $string);
    
        7
  •  9
  •   Damien MATHIEU    16 年前
    explode("\n", $str);
    

    “(而不是”)非常重要,否则换行符将无法解释。

        8
  •  9
  •   Spooky    10 年前

    您不需要preg_x函数、preg模式或str_替换等。为了成功地用换行符将字符串拆分为数组。在所有场景中,无论是Linux/Mac还是M$都是如此。

    <?php 
    
     $array = explode(PHP_EOL, $string);
     // ...  
     $string = implode(PHP_EOL, $array);
    
    ?>
    

    吡喹酮 是保存服务器平台使用的换行符的常量。

        9
  •  7
  •   Tom    16 年前
    <anti-answer>
    

    如其他答案所述,请务必使用 explode 而不是 split 因为从php 5.3.0开始 分裂 被贬低。即以下内容: 不是 你想怎么做:

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

    lf=”\n“=chr(10),cr=”\r“=chr(13)

    </anti-answer>
    
        10
  •  7
  •   Deen Foxx    9 年前

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

    如果需要保留空行,请去掉空值(它只是一个占位符)和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);
    
        11
  •  3
  •   Jeff    14 年前

    对于任何试图在crontab中显示cronjobs并对如何分隔每行感到沮丧的人,请使用explode:

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

    使用'\n'似乎不起作用,但chr(10)工作得很好:d

    希望这能减轻一些人的头痛。

        12
  •  2
  •   Parisa    12 年前

    您可以使用:

     \str_getcsv($str,PHP_EOL);
    
        13
  •  2
  •   Sandor    12 年前

    您可以执行$string=nl2br($string),以便将换行符更改为

    <br />. 
    

    这样,无论系统是否使用\r\n或\n或\r

    然后您可以将它馈送到一个数组中:

    $array = explode("<br />", $string);
    
        14
  •  1
  •   antelove    8 年前
    $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>
        15
  •  1
  •   korwalskiy    7 年前

    在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);
    ?>
    
        16
  •  0
  •   user2533777    12 年前

    这种方法总是适用于我:

    $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'])));
    
        17
  •  0
  •   Roque    8 年前

    仅使用“基本”包也是简单情况的解决方案:

    > 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)
    
        18
  •  -4
  •   Ben Rhys-Lewis    9 年前

    在字符串或换行符之间使用任何特殊字符 \n 使用php explode可以实现这一点。

    推荐文章