2011-11-23 82 views
2

我在我的網站上編寫了一個php搜索腳本,用於檢查文本文件中是否存在軟件包(我使用的是file_get_contents)。它將用戶輸入的內容與字符串'BUILD :「下面是該文件的一個例子,我將在下面的段落解釋它:帶字符串的PHP nextLine

BUILD: packageA 
URL: www.package-a.com 

BUILD: packageB 
URL: www.package-b.com 

BUILD: packageC 
URL: www.package-c.com 

所以,如果用戶搜索‘packageB’,將它與‘BUILD:’合併使得變量我測試的價值是:「BUILD:packageB」。如果該字符串存在或不存在,我有條件的說法;一切工作都很好。

我的問題是如何列出其下面帶有回顯的URL:行?我一直在測試strlen()的一些想法,我似乎無法得到它,並且文本文件具有不同的進入條紋。有沒有辦法使PHP強制"nextLine()"如果有這樣的事情...... PHP是否可以識別返回分隔符?

謝謝!

回答

2
// The string you are searching for 
$package = 'packageB'; 

// Get the file into an array 
$data = file('myfile.txt'); 

// Loop the data 
for ($i = 0, $found = FALSE; isset($data[$i]); $i++) { 
    if (trim($data[$i]) == "BUILD: $package") { // We found the one we're looking for 
    echo trim($data[++$i]); // Echo the next line 
    $found = TRUE; 
    break; // Stop looping 
    } 
} 

if ($found) { 
    echo "<br />\nI found the URL on line $i"; 
} else { 
    echo "I didn't find it!"; 
} 

file()獲取文件數據作爲陣列,其中每個元素是文件的一行,不同於像file_get_contents()返回一個字符串。

+0

謝謝你,Dave,這是非常有幫助的。我感謝您的幫助。 – user1062058

1

可以做一個正則表達式與/ m改性劑,其使得它跨越多個行匹配,然後用帶括號的圖案以捕獲線以下的匹配:

if (preg_match_all('/BUILD: packageB\n(.+)\n/m', file_get_contents('file.txt'), $match)) { 
    foreach ($match[1] as $match) { 
     echo "$match\n"; 
    } 
} 

輸出:

URL: www.package-b.com 
+0

謝謝Alex,我明白你的意思。您的意見是讚賞。 – user1062058

0

如果您對其他方法開放,那麼這裏是一個更簡單/更快的解決方案。

builds.php

<?php 
$builds=array("packageA"=>"www.package-a.com", 
       "packageB"=>"www.package-b.com", 
       "packageC"=>"www.package-c.com", 
       "packageD"=>"www.package-d.com"); 
?> 

OtherScript.php

<?php 
if(isset($_POST['package'])){ 
    include('./builds.php'); 
    if(array_key_exists($_POST['package'], $builds)){ 
     $notice="You Selected: ".$_POST['package']." Url:".$builds[$_POST['package']]; 
    }else{ 
     $notice="Package Not Found"; 
    } 
} 


echo (isset($_POST['package']))?$notice:''; 
?>