带有String的PHP nextLine

时间:2011-11-23 14:13:18

标签: php

我在我的网站上写了一个php搜索脚本,用于检查文件是否存在于文本文件中(我使用file_get_contents。)它取用户输入的内容并将其与字符串'BUILD结合起来:'下面是该文件的一个示例,我将在其后的段落中解释:

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()测试一些想法,我似乎无法得到它,文本文件有不同的strlens进入。如果有这样的事情,有没有办法让PHP强制"nextLine()" ... PHP是否识别返回分隔符?

谢谢!

3 个答案:

答案 0 :(得分: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()这样的单个字符串返回。

答案 1 :(得分: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

答案 2 :(得分: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:'';
?>