如何将包含空格和换行符的字符串拆分?

12
我想要将一个字符串按照空格(" ")和换行符("\n")作为分隔符分割并放入数组中。
方法(我认为不是最好的方法)是:
  1. 通过空格将数组分割
  2. 从数组重新组成字符串
  3. 再次分割为新行
  4. MySQL转义单个元素。
问题:如何通过空格和新行来分割一个字符串?
参考:new line Array

您可以使用正则表达式来实现,这可能是最有效的方法。另一种方法是两次分割字符串,首先按空格分割,然后将每个结果数组按换行符再次分割。最后,将所有数组合并为一个(使用array_merge函数)。 - Voitcus
2
使用以下代码:preg_split('/[\s\n]/', $str ); - Prasanth Bendra
4个回答

25
您可以使用一个
$segments = preg_split('/[\s]+/', $string);

这个函数将在每个空格(\s)出现的地方分割$string,包括空格、制表符和换行符。多个连续的空白字符将被视为一个(例如"hello, \n\t \n\nworld!"将仅被分割成hello,world!,中间没有空字符串)。
请参见此处的函数参考。

我已经到处使用 preg_match、str_replace 等各种方法搜索了很久,终于找到了完美的解决方案。非常感谢。 - TLG123
它还可以删除多个空行。很好。不需要遍历结果数组并查找空槽。 - Avatar
很好,但是注意 "a b" 会返回一个包含4个元素的数组:["", "a", "b", ""]。 - undefined

7
您可以使用preg_split来按多个分隔符将内容拆分。
$pattern = '/[ \n]/';
$string = "something here ; and there, oh,that's all!";
echo '<pre>', print_r( preg_split( $pattern, $string ), 1 ), '</pre>'; 

在你的echo中,应该用"."代替","。 - Tobias Golbs
@TobiasKun 不会产生任何错误。请查看其语法 echo ( string $arg1 [, string $... ] ) - Yogesh Suthar
尽管Tobias的方法是有效的...但它让我眼花缭乱...我将其改为更适合像我这样传统人士阅读的方式。 - ftrotter

1
您可以使用多个分隔符来分解内容。
示例代码:
<?php
$str = "Brand : Pandora~ Collection : Summer 13~ Colour : Multi~ Gender : Ladies~ Material : Murano Glass~ Our Code : 0573835~ Packaging : Pandora Branded Packaging~ Product Code : 750513~ Product Type : Bead~ Style : Contemporary";
$r1 = explode("~", $str);
$stringtxt = '<table>';
if (count($r1) > 0) {
    foreach ($r1 as $value) {
        $rows = explode(":", $value);
        $stringtxt .= '<tr>';
        $stringtxt .= '<td>' . $rows[0] . '</td><td>' . $rows[1] . '</td>';
        $stringtxt .= '</tr>';
    }
}
$stringtxt .= '</table>';
print $stringtxt;
?>

输出

<table>
<tr><td>Brand </td><td> Pandora</td></tr>
<tr><td> Collection </td><td> Summer 13</td></tr>
<tr><td> Colour </td><td> Multi</td></tr>
<tr><td> Gender </td><td> Ladies</td></tr>
<tr><td> Material </td><td> Murano Glass</td></tr>
<tr><td> Our Code </td><td> 0573835</td></tr>
<tr><td> Packaging </td><td> Pandora Branded Packaging</td></tr>
<tr><td> Product Code </td><td> 750513</td></tr>
<tr><td> Product Type </td><td> Bead</td></tr>
<tr><td> Style </td><td> Contemporary</td></tr>
</table>

1

始终从大到小进行。

因此,首先通过"\n"拆分,然后通过" "拆分。

$data = "This is a test\nAnd something new happens.";
$rows = explode("\n", $data);
$words = array();
foreach($rows as $row) {
    $temp = explode(" ", $row);
    foreach($temp as $word)
        $words[] = $word;
}

会给你一个包含所有单词的数组。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接