2011-02-11 131 views
0

在下面的函數中,我應該如何初始化$匹配以避免在註釋行上拋出未定義的索引?未定義的偏移量:0 preg_match中的錯誤

function save_rseo_nofollow($content) { 
$my_folder = get_option('rseo_nofollow_folder'); 
    preg_match_all('~<a.*>~isU',$content["post_content"],$matches); 
    for ($i = 0; $i <= sizeof($matches[0]); $i++){ 
     if (!preg_match('~nofollow~is',$matches[0][$i]) //ERROR UNDEFINED OFFSET HERE! 
      && (preg_match('~' . $my_folder . '~', $matches[0][$i]) 
       || !preg_match('~'.get_bloginfo('url').'~',$matches[0][$i]))){ 
      $result = trim($matches[0][$i],">"); 
      $result .= ' rel="nofollow">'; 
      $content["post_content"] = str_replace($matches[0][$i], $result, $content["post_content"]); 
     } 
    } 
    return $content; 
} 

回答

2
if (isset($matches[0][$i]) && !preg_match('~nofollow~is',$matches[0][$i])... 

您可以檢查是否設置了此偏移...。


編輯:或:

for ($i = 0; $i <= sizeof($matches[0])-1; $i++){ 

因爲,假設你的$ [0]數組的比賽有10個選擇,它會去從到,而不是(這是你的數組的大小)你遵循?

+0

@Scott B:由於`$ i`在**循環中定義**,所以包裝將不起作用;)。 – Shikiryu 2011-02-11 17:04:50

+0

是的,我發現並刪除了我的評論。你打敗了我。 +1爲您提供幫助。現在我有另一個問題,我會問另一個問題相同的功能:) – 2011-02-11 17:27:09

0

添加$matches = array();然後再使用它。

此外,您可能需要檢查以確保數組填滿了您的期望。獲取未定義的偏移量意味着所討論的數組沒有被請求的鍵,所以要麼它沒有使用你期望它使用的鍵,要麼它沒有填充數組(你也可能想要添加一個檢查到確保在你嘗試訪問數組之前確實存在你的數組中的東西)。

1
if(isset($matches['0'][$i])) 
{ 
$myVariable= $matches['0'][$i]; 
} 

如果ISSET檢查具有奇怪的效果,使該索引可讀。 在我的情況下,我可以看到print_r中的數組,但未定義的索引錯誤使我無法使用它。經過2個小時的調試,我試圖把這個,現在它工作!