2011-11-02 158 views
0

爲什麼這不起作用?PHP刪除重複空間

$content=file_get_contents('whatever.txt'); 
$content=str_replace("\r\n","\n",$content); // Convert linebreaks 
$content=str_replace("\n",' ',$content); // Remove linebreaks 
$content=preg_replace('/\s+/',' ',$content); // Remove all duplicate spaces 
$content=preg_replace('/[^a-zA-Z\s]/','',$content); // Remove all non-letters 
$content=trim($content); 
$content=explode(' ',$content); 

一些值仍是空的空間:

例如

$content[123] = ''; 

難道我明白了什麼錯誤?當然應該沒有?

+0

那麼一開始,前兩個'str_replace's是不必要的 - 第一個'preg_replace'會做同樣的工作。 – DaveRandom

回答

4

我覺得整個事情可以概括/固定在這些行後:

$content = file_get_contents('whatever.txt'); // Get file 
$content = preg_replace('/[^a-zA-Z\s]/', '', $content); // Strip non-alpha/whitespace 
$content = preg_split('/\s+/', $content, NULL, PREG_SPLIT_NO_EMPTY); // Split by whitespace and remove empty elements 
+0

這是我的第一個想法,但它不這樣做。 - 啊,現在你找到了它:) – hakre

+0

@hakre剛剛意識到並添加了'preg_replace'來去除非alpha,並且爲了可讀性而跨越多行分佈。 – DaveRandom

+0

我只是要檢查這是工作,並讓你知道。 – Alasdair

1

嘗試打印您的最終內容,看看有多少多餘的空格被打印這導致一個空元素陣列使用爆炸

+0

數組中有數十萬個元素... – Alasdair

+0

哦每5000字大約有250個空格。 – Alasdair

2

我不能告訴你具體,但你可能只是試試這個:

$content = file_get_contents('whatever.txt'); 
$content = preg_replace('/[^a-zA-Z\s]+/', '', $content); // Remove all non-letters 
$content = trim($content); // Trim 
$content = preg_split('/\s+/', $content); // Split 

這省去了多餘的東西和preg_split一次照顧一個或多個空白字符(這包括\r\n)。

編輯:只需添加修剪以防止在開始和結束時出現空標記(如果適用)。這也可以通過使用PREG_SPLIT_NO_EMPTY標誌來完成,但是,這可以在多個地方(理論上)完成,因此可以隱藏OP中可能出現的錯誤。