2010-04-01 89 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);