這裏是我的代碼...基本上找到一個變量中的任何頁面數均和,然後從數組替代我的preg_replace代碼
$content_text = preg_replace("/page-(\d+)-/sie", '$pageurl[$1]', $content_text);
它的工作原理一種享受,直到與頁面的URL來替換它NUMBER發現不在數組中,它返回一個錯誤...
是否有另一種有效的方法可以做到這一點呢?
我喜歡我上面的代碼,因爲它很簡單,但我可能不得不使用更復雜的代碼...
這裏是我的代碼...基本上找到一個變量中的任何頁面數均和,然後從數組替代我的preg_replace代碼
$content_text = preg_replace("/page-(\d+)-/sie", '$pageurl[$1]', $content_text);
它的工作原理一種享受,直到與頁面的URL來替換它NUMBER發現不在數組中,它返回一個錯誤...
是否有另一種有效的方法可以做到這一點呢?
我喜歡我上面的代碼,因爲它很簡單,但我可能不得不使用更復雜的代碼...
語法可能不是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;」能夠訪問函數內部的變量。
添加到檢查更換,看是否存在項目陣列中或沒有。如果將代碼放入函數並使用preg_replace_callback而不是e標誌,可能會更容易閱讀。
爲什麼不用preg_match_all得到數字,根據你得到的數字創建一個替換數組,然後用這些數組運行一個str_replace。這樣你可以保證1-1更換。
foreach ($pageurl AS $num => $url) {
$search[] = "/page-({$num})-/sie";
$replace[] = $url;
}
$content_text = preg_replace($search, $replace, $content_text);
想象一下,使用匿名函數會有多好。我知道支持不到5.3,但這將是一個美好的一天。 – alex 2010-04-01 00:46:28
完美!我只需從代碼中刪除e標誌。全球也沒有工作,所以我不得不把$ pageurl放在函數中。 in-array()不起作用,所以我只是使用isset($ pageurl [$ number [1]))。謝謝你的幫助! – 2010-04-06 01:30:28