2011-02-11 4 views
0

아래 함수에서 $ matches를 초기화하여 주석 처리 된 행에 정의되지 않은 인덱스가 표시되지 않게하려면 어떻게해야합니까?정의되지 않은 오프셋 : 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 개 선택가 있다고 가정 해 봅시다 때문에, 갈거야에서 09하지 (배열의 크기)?

+0

@ Scott B : '$ i'가 ** loop **에 정의 되었기 때문에 배치가 작동하지 않습니다. – Shikiryu

+0

네, 그걸 잡아 내 코멘트를 삭제했습니다. 당신은 저를 펀치에 이겼습니다. 도움을 청합니다. 지금 나는 다른 질문에서 물어볼 동일한 기능에 또 다른 문제가있다 :) –

0

사용하기 전에 $matches = array();을 추가하십시오.

또한 어레이가 예상 한대로 채워지는지 확인하고 싶을 수도 있습니다. 정의되지 않은 오프셋을 얻는 것은 문제의 배열에 요청 된 키가 없다는 것을 의미하므로 사용하려고하는 키를 사용하지 않거나 배열을 채우지 못합니다. 당신이 그것을 시도하기 전에 배열에 실제로 물건이 있는지 확인하십시오.)

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

IS ISET 검사에 이상한 효과가있어 해당 색인을 읽을 수 있습니다. 필자의 경우 print_r에서 배열을 볼 수는 있지만 정의되지 않은 인덱스 오류로 인해이 배열을 사용할 수 없었습니다. 디버깅 2 시간 후 나는 이걸 넣었고 이제는 작동한다 !!!

+0

이것은 나를 위해 일했다; – ninsky

관련 문제