2011-11-23 54 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:''; 
?>