2010-04-01 74 views
1

这里是我的代码...基本上找到一个变量中的任何页面数均和,然后从数组替代我的preg_replace代码

$content_text = preg_replace("/page-(\d+)-/sie", '$pageurl[$1]', $content_text); 

它的工作原理一种享受,直到与页面的URL来替换它NUMBER发现不在数组中,它返回一个错误...

是否有另一种有效的方法可以做到这一点呢?

我喜欢我上面的代码,因为它很简单,但我可能不得不使用更复杂的代码...

回答

1

语法可能不是100%正确的,但;

$content_text = preg_replace_callback('/page-(\d+)-/sie', 
    create_function('$number', 
        'global $pageurl; 
        if (in_array($number, $pageurl)){ 
         return $pageurl[$number]; 
        }else{ 
         /*do something*/ 
        };'), 
    $content_text); 

编辑忘了包括 “全球$ PAGEURL;”能够访问函数内部的变量。

+0

想象一下,使用匿名函数会有多好。我知道支持不到5.3,但这将是一个美好的一天。 – alex 2010-04-01 00:46:28

+0

完美!我只需从代码中删除e标志。全球也没有工作,所以我不得不把$ pageurl放在函数中。 in-array()不起作用,所以我只是使用isset($ pageurl [$ number [1]))。谢谢你的帮助! – 2010-04-06 01:30:28

0

添加到检查更换,看是否存在项目阵列中或没有。如果将代码放入函数并使用preg_replace_callback而不是e标志,可能会更容易阅读。

0

为什么不用preg_match_all得到数字,根据你得到的数字创建一个替换数组,然后用这些数组运行一个str_replace。这样你可以保证1-1更换。

0
foreach ($pageurl AS $num => $url) { 
    $search[] = "/page-({$num})-/sie"; 
    $replace[] = $url; 
} 
$content_text = preg_replace($search, $replace, $content_text);