2010-03-17 42 views
0

我有一個文件,我們會打電話給info.txt下一個只有在它下面的UNIX格式:PHP爆炸不是在陣列點填充0

#Dogs 
#Cats 
#Birds 
#Rabbits 

和我反對它運行以下命令:

$filename = "info.txt"; 
$fd = fopen ($filename, "r"); 
$contents = fread ($fd,filesize ($filename)); 

fclose ($fd); 
$delimiter = "#"; 
$insideContent = explode($delimiter, $contents); 

現在一切看起來都正常工作,除非當我顯示陣列我得到以下。

[0] => 
[1] => Dogs 
[2] => Cats 
[3] => Birds 
[4] => Rabbits 

我檢查.txt文件,以確保有沒有在第一#前方的任何空間或隱藏字符,所以我在爲什麼會發生其他的損失比我感覺我我錯過了非常簡單的事情。有任何想法嗎?

在此先感謝!

+0

您可以使用$內容=的file_get_contents( 「info.txt」); – lunohodov 2010-03-17 00:18:15

回答

6

explode()在分隔符上分裂。如果第一個分隔符之前沒有任何內容,那麼這就是第一個分隔符。沒有。一個空字符串。

+5

沒錯。爲了克服這個問題,我建議'$ contents = trim($ contents,$ delimiter)'。 :) – Savageman 2010-03-17 00:17:27

+0

哇,我甚至沒有這樣想過。我明白了分隔符之後的意思。這解釋了一切。謝謝! – 2010-03-17 00:23:46

2

我想這是因爲第一個字符是一個分隔符,所以它會在第一個元素的左邊放置任何東西,即使它是空字符串。所以,你將不得不開始文件與 「狗」,而不是 「#Dogs」

0

你運行它像

#狗貓###鳥兔

PHP分裂它通過切割,因此你有狗的地方它看起來像'空白'|小狗。

你可以隨便填[0]通過array_shift($input, 1);

0

您可以通過換行爆炸,不能使用#可言,雖然那麼你將有一個尾隨空項目。我想你仍然需要在解析後進行一些完整性檢查(如果爲空,則刪除第一個/最後一個項目)。

0

另一種方式

$f=file("file"); 
print_r(preg_replace("/^#/","",$f)) ; 
+0

那麼,你的代碼會導致另一個問題:尾隨的新行將包含在每個數組項中。使用標誌FILE_IGNORE_NEW_LINES。除此之外,它非常巧妙和優雅。想知道哪種解決方案效果最好。 – Savageman 2010-03-17 07:57:02