2013-07-16 68 views
2

我有以下文字:爆炸文成數組作爲每款

$test = 'Test This is first line 

Test:123 

This is Test'; 

我想這個字符串爆炸段落的數組。我寫了下面的代碼,但它不工作:

$array = explode('\n\n', $test); 

任何想法我在這裏失蹤?

+0

您是否嘗試過'\ r \ N'也許'PHP_EOL'不變? – naththedeveloper

+0

它是否與$ test ='Test一起工作測試這是第一行\ n \ n測試:123 \ n \ n這是測試'; ?我不確定這一點,但也許你需要在將字符串定義爲變量時明確包含換行符。 – astrognocci

回答

3

您的代碼

$array = explode('\n\n', $test); 

應該有\n\n雙引號括起來:

$array = explode("\n\n", $test); 

使用單引號,它看起來通過可變$test的文字\n\n。使用雙引號,它會查找\n\n這兩個回車符的評估值。

此外,請注意行的結束取決於主機操作系統。 Windows使用\r\n而不是\n。您可以通過使用預定義的常量PHP_EOL來獲得操作系統的行結束。

7

您可能在Windows上使用\r\n而不是\n。你可以使用正則表達式來使它具有普遍性與preg_split()

$array = preg_split('#(\r\n?|\n)+#', $test); 

模式說明:

  • (:開始匹配組1
  • \r\n?|\n:匹配\r\n\r\n
  • ):結尾匹配組1
  • +:重複一次或多次

如果你想換行2分裂,然後通過{2,}更換+


更新:您可以使用:

$array = preg_split('#\R+#', $test); 

This extensive answer佔地面積\R意義。請注意,這僅在PCRE/perl中受支持。所以從某種意義上說,它不太適合交叉味道。

+0

'preg_match_all('/.+/',$ test,$ test)'仍然是一個更容易恕我直言,做OP什麼 –

+0

@EliasVanOotegem現在好了,你說它...我專注於「分裂「idea:p如果我們想要拆分2個換行符,或者加上:)拆分解決方案已經得到更多控制。 – HamZa

+1

公平點。由於OP指定了段落作爲分隔符,所以我不得不說你的方法是 –

2

嘗試雙引號

$array = explode("\n\n", $test); 
0

你必須嘗試這個?

$array = explode("\n", $test); 
+0

這是拆分的新行,而不是段落。 – StellarDoor5319

1

最簡單的辦法像你描述會得到這個文本到一個數組:

preg_match_all('/.+/',$string, $array); 

由於/./匹配任何字符,除行終止,而+是貪婪的,它會匹配儘可能多的字符,直到遇到新行。
使用preg_match_all確保對每一行都重複此操作。當我嘗試這樣做,輸出是這樣的:

array (
    0 => 
    array (
    0 => '$test = \'Test This is first line', 
    1 => 'Test:123', 
    2 => 'This is Test\';', 
), 
) 

還要注意的是線原料是不同的,這取決於環境(\n的* NIX系統,相比\r\n窗戶,或者在某些情況下,簡單\r)。也許你可能也想試試explode(PHP_EOL, $text);,也是

0

你需要在你的代碼中使用雙引號,這樣\n\n實際上被評估爲兩行。下面看:

'Paragraph 1\n\nParagraph 2' =

第1 \ n \ nParagraph 2

鑑於:

"Paragraph 1\n\nParagraph 2" =

第1段

第2

此外,Windows系統使用\r\n\r\n代替\n\n。您可以檢測該行尾系統使用:

PHP_EOL 

那麼,您的最終代碼如下:

$paragraphs = explode(PHP_EOL, $text);