2010-07-27 165 views
0

我已经建立了基于以下变量$行:PHP字符串变量

foreach ($regex as $each){ 
$parts = explode('::',$each); 
$pattern = '"/^'.$parts[1].'/i"'; 
$subject = '$row['.$parts[0].']'; 

$line .= 'preg_match'.'('.$pattern.','.$subject.')'; 
if (end($regex) != $each){ 
$line .= '&&'; 
} 
} 

我有一个叫$线的功能。一旦调用,回声$线产生以下输出:

preg_match("/^ab/i",$row[RG])&&preg_match("/^cd/i",$row[EX]) 

我试图使用$行变量中的一个,如果循环和的preg_match不起作用。但是,如果我要在if语句中复制并粘贴$ line的值,它的工作原理就很好。任何输入将不胜感激!

+0

你能将代码格式化为代码吗?这会让阅读变得更容易。 – 2010-07-27 04:33:56

+0

另外,你是什么意思,你有一个函数,调用“$行”? $行似乎是一个字符串,而不是一个函数。 – 2010-07-27 04:34:59

+0

嗨!我的意思是我将$ line传递给一个函数,该函数在脚本中稍后对$ row [RG]&$ row [EX]调用mssql存储proc返回值。问题在于,如果在$ if语句之一中使用$行,preg_match不起作用,但是,如果我要复制并粘贴$ line的值(即preg_match(“/^ab/i”,$ row [RG])&& preg_match(“/^cd/i”,$ row [EX]))到相同的if语句中,它工作得很好。非常感谢您的帮助! – Don 2010-07-27 04:44:06

回答

4

这里是一个替代解决方案premisos可能会更好:

$passed = true; 
foreach ($regex as $each){ 
$parts = explode('::',$each); 
$pattern = '/^'.$parts[1].'/i'; 
$subject = $row['"'.$parts[0].'"']; 

if (!preg_match($pattern, $subject)) { 
    $passed = false; 
    break; 
} 
} 

if ($passed) { 
    echo 'Woohoo! It passed!'; 
} 

这将可能是首选方法,因为如果一个人的preg_match失败,这一切失败,就没有必要继续下去。

+0

啊,是的,这是更好,更安全。好一个。 – 2010-07-27 04:50:34