我在数组$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 ...
答案 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)
答案 3 :(得分:0)
尝试为数组和foreach语句中的元素使用不同的名称。
另外,为了提高效率,我建议你将file_get_contents放在循环之外。
最后,你的上一个foreach循环应该使用$ matches,而不是$ matches [0](只调用第一个匹配。