2017-08-08 122 views
1

我目前正在努力排除空行以保存到數組$presidents(並通過這樣做,解決了foreach循環回顯沒有名稱的字符串的問題) 。刪除/排除在PHP中保存和使用的空行

我嘗試了一些應該工作的東西,在我的業餘意見當然(preg_match(),trim()等)。

有人可以幫助我嗎?

$file = fopen("namen2.txt", "r"); 
$presidents = array(); 
$count = count(file("namen2.txt")); 
for($i = 1; $i <= $count;){ 
    $file_line = fgets($file); 
    $line = explode(" ", $file_line); 
    $president = array(); 
    $president["firstname"] = $line[0]; 
    if(empty($president["firstname"] == false)){ 
     $president["lastname"] = $line[1]; 
     $president["counter"] = $i; 
     $presidents[] = $president; 
     $i++; 
    } 
    else{echo "fehler";} 
} 
foreach($presidents as $president_order){ 
    echo "Hey ". $president_order["firstname"]. " ". $president_order["lastname"]. ", du bist der ". $president_order["counter"]. ". Präsident der USA in meiner Liste. \n"; 
} 

編輯:我已經通過改變條件和在插入階段控制我的輸入來解決我的問題,謝謝你的提示!

回答

1

您應該在數據插入階段處理空格和不需要的字符,而不是在數據插入階段之後處理,以便在插入前您應該返回該代碼並清理數據。

使用PHP的trim應該工作,沒有理由爲什麼它不適合你。如果你有一個變量持有一個字符串,如「名字姓氏」,那麼使用該函數將把它變成「名字姓氏」。

看起來你正在用空格分割每一塊數據...考慮到你的數據可能必須包含空格(例如,Mary名字也可能有空格),這不是一個好主意。

0

可以發現並刪除空行與以下正則表達式:

preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $presidents); 

因爲它是你可能需要遍歷數組元素雖然數組。

0

我沒有測試這個代碼,但它似乎是一個更緊密的方式來完成任務。只需trim()並檢查正字符串長度。我已將元素限制添加到explode(),並濃縮了您的數據存儲語法。

$file=fopen("namen2.txt","r"); 
$i=0; // initialize counter 
while(!feof($file)){ 
    $line=trim(fgets($file)); // get line and trim leading/trailing whitespaces from it 
    if(strlen($line)){ // if there are any non-whitespace characters, proceed 
     $names=explode(' ',$line,2); // max of two elements produced, in case: Martin Van Buren 
     // explode will fail to correctly split: John Quincy Adams 
     $presidents[]=['counter'=>++$i,'firstname'=>$names[0],'lastname'=>(isset($names[1])?$names[1]:'')]; // store the data for future processing 
    } 
} 
fclose($file); 

foreach($presidents as $pres){ 
    echo "Hey {$pres["firstname"]} {$pres["lastname"]}, du bist der {$pres["counter"]} Präsident der USA in meiner Liste.\n"; 
}