php preg_match为何匹配出相反结果?

来源:百度知道 编辑:UC知道 时间:2024/05/14 09:41:58
rxlist2.txt:
abc
abc123
def

<?
$fp = file("rxlist2.txt");
foreach ($fp as $list) {
preg_match("/abc/",$list);
}
print_r ($list);
?>
这样匹配出的def,而不是我所预想的abc和abc123

而这样却可以:
<?
$fp = file("rxlist2.txt");
foreach ($fp as $list) {
if(preg_match("/abc/",$list)) {echo $list.'<br>';}
}
?>

请问第一段代码错在哪了?
一楼的朋友,您说循环覆盖,可是为何我第二段代码就ok呢?
二楼的朋友,您的代码错误

源代码

<?
$fp = file("rxlist2.txt");
foreach ($fp as $list) {
preg_match("/abc/",$list);
}
print_r ($list);
?>

问题在于.
1.首先$fp = file("rxlist2.txt");得到结果变量名为$fp的数组。
2.foreach ($fp as $list)循环该数组,因为数组没有中断条件,会执行到结束,也就是说会循环3次.而每次循环$list都会覆盖上一次循环得到的$list.所以输出$list的值为def.
3.这里的preg_match("/abc/",$list);没有任何的意义.

<?php
$fp = file("rxlist2.txt");
$match = array();
foreach ($fp as $list) {
if(preg_match("/abc/",$list)){
$match[] = $list;
}
}
print_r ($match);
?>
这样就可以了,测试过!

你第一段代码里,print_r($list)这个$list是数组中的最后一个元素