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

使用数组中的关键字搜索文件内容:PHP,php,Php,我在数组中有3个关键字$val[1]:例如1、2、3 以及以下代码: 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*\.\.\.

我在数组中有3个关键字
$val[1]
:例如
1、2、3

以及以下代码:

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>";} }
我在代码中哪里出错了?(我将只得到3行文本作为结果,因为每个关键字只返回一个结果)


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

$bus将打印的内容示例

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

您希望使用以下内容:

foreach ($val as $keyword) {
    // replace usage of $val with $keyword
您将获取数组的第二个元素
$val[1]
,即
two
,然后对
two
应用
foreach
。然后将其存储在原始变量的顶部,
$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";

    // ...
}
$val=preg_split('/-./',$val,-1,preg_split_NO_EMPTY);//除以
对于($i=0;$i
使用

预设定顺序

作为
preg\u match\u all


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

此外,出于效率考虑,我建议您将文件内容放在循环之外


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

您的$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"; ...

您正在foreach中覆盖$val数组..请检查下面我的答案。您可能还想接受前面一些问题的答案。如果您认为我遗漏了代码的一个重要部分,我已对其进行了编辑以更准确地显示它-因此,我认为我没有覆盖$val。如果您认为我遗漏了代码的一个重要部分,我已将其编辑为更准确地显示它-因此我认为我没有覆盖$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"; ...