使用array:PHP中的关键字搜索文件的内容

时间:2011-02-25 05:01:47

标签: php

我在数组$val[1]中有3个关键字:例如one, two, three

和以下代码:

foreach ($bus as $val){

$val = preg_split('/-./', $val, -1, PREG_SPLIT_NO_EMPTY); // split by _ 
$val[1] = trim(preg_replace('/\s*\(.*/', '', $val[1])); // remove () if found
$val[1] = trim(preg_replace("/\s*\.\.\.*/", '', $val[1])); // remove ... if found
    $pattern = "/.*$val[1].*/i";
    $data3 = file_get_contents("foo.txt");
    preg_match_all($pattern, $data3, $matches);
        foreach ($matches[0] as $v){
        echo $pattern."<BR>".$v."<BR>";} }

然而,当我在循环中执行最后一个echo $pattern时,我发现它只打印出/.*two.*/i(意味着它只使用第二个关键字来搜索文件),而不是在它之外它可以打印所有关键字

/.*one.*/i
/.*two.*/i
/.*three.*/i

我在代码中哪里出错了? (我只会得到3行文字作为结果,因为每个关键字只会返回一个结果)

编辑:想想我遗漏了代码的一个重要部分,我编辑它以更准确地显示它 - 所以我不认为我已经覆盖$ val

$ bus将打印的示例

Ayer Rajah Avenue-.Opp JVC Electron... 
Ayer Rajah Avenue-.JVC Electronics ... 
Portsdown Road-.Opp Portsdown Camp ... 

4 个答案:

答案 0 :(得分:1)

你正在编写你的$ val数组!

foreach($val[1] as $keyword)    //when you do "as $val" that means for the 2nd time.. $val[1] does not exist!
{
     $pattern = "/.*$keyword.*/i"; ...

答案 1 :(得分:0)

你想使用类似的东西:

foreach ($val as $keyword) {
    // replace usage of $val with $keyword

您正在使用数组的第二个元素$val[1],即two,然后对foreach应用two。然后,您将其存储在原始变量$val

的正上方

修改

您只使用$val[1]。您是否需要将所有逻辑应用于$val

中的所有条目
$val = preg_split('/-./', $val, -1, PREG_SPLIT_NO_EMPTY); // split by _ 

for ($i = 0; $i < count($val); $i++) {
    $val[$i] = trim(preg_replace('/\s*\(.*/', '', $val[$i])); // remove () if found
    $val[$i] = trim(preg_replace("/\s*\.\.\.*/", '', $val[$i])); // remove ... if found
    $pattern = "/.*$val[$i].*/i";

    // ...
}

答案 2 :(得分:0)

使用

  

PREG_SET_ORDER

作为preg_match_all

中的第四个参数

reference

答案 3 :(得分:0)

尝试为数组和foreach语句中的元素使用不同的名称。

另外,为了提高效率,我建议你将file_get_contents放在循环之外。

最后,你的上一个foreach循环应该使用$ matches,而不是$ matches [0](只调用第一个匹配。