2017-08-07 47 views
2

我有一個使用函數file()將整個文件讀入數組的小腳本。檢測文件中的空行

$arr = file('file.txt'); 

的file.txt的結構是這樣的:

john 
david 

james 

所以,如果我調試的數組返回:

array(4) { 
    [0]=> 
    string(6) "john 
" 
    [1]=> 
    string(7) "david 
" 
    [2]=> 
    string(2) " 
" 
    [3]=> 
    &string(5) "james" 
} 

我試圖找到一種方法來檢測空行當我分析foreach循環中的數組的每個值:

foreach ($arr as $value) { 

我嘗試了空功能,但沒有..我也嘗試與PHP_EOL\n比較值,也沒有。

我知道我可以避免使用FILE_IGNORE_NEW_LINES的空行,但我不需要它。我只是在尋找一種方法來檢測這些空行。

+0

什麼了'é mpty($ value)'return? – Kai

+0

它返回布爾值假 – Keaire

+0

您可以嘗試清空(trim($ value)); – anwerj

回答

2

你不應該直接使用file,它可能會導致內存問題。而是試試這個。

<?php 
$file = fopen("test.txt","r"); 

while(! feof($file)) 
{ 
    // Trim will remove any whitespace prepended/appended 
    // Empty line will now result in empty string 
    $line = trim(fgets($file)); 
} 

fclose($file); 
+0

原始海報一直使用'file()'沒有任何問題,這與問題無關。 – localheinz

0

可以trim() $值之前打個電話與empty()這樣的測試:

if(empty(trim($value)) { 
    // $value is empty 
} 

,如果它不與preg_match()這樣的工作測試:

foreach ($arr as $value) { 
    if(preg_match("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", $value)) { 
     // $value is empty 
    } 
} 
+0

爲什麼'trim()'不起作用? – localheinz

+0

那麼如何鏈接問題呢? – localheinz