2011-03-19 3 views
1

다음 문자열을 구문 분석하려고하지만 인덱스 배열의 현재 정의되지 않은 오프셋을 제거하려고합니다. 정의되지 않은 오프셋 문제가있는 도움을 주시면 감사하겠습니다.PHP recursion - notice : undefined offset : 20 array

error_reporting(E_ALL); 
ini_set('display_errors', '1'); 
function my_recursion($String, &$Inc) { 
    $l = strlen($String); 
    $has_quotes = 0; $array = array(); 
    $x= 0; 
    for ($Inc; $Inc < $l; $Inc++) { 
     $my_char = $String[$Inc]; 
     if ($my_char == '(' && !$has_quotes) { 
      $Inc++; 
      $array[$x] = my_recursion($String, $Inc); 
      $x++; 
     } else if ($my_char == '"') { 
      $has_quotes = !$has_quotes; 
      if (!$has_quotes) 
       $x++; 
     } else if ($has_quotes) { 
      $array[$x] .= $my_char; 
     } 
    } 
    print_r($array); 
} 
$String = '(("HELLO"("BAR")("FOO")()""))'; 
$Inc = 0; 
(my_recursion($String, $Inc)); 
+0

변수 이름을 작은 글자로 씁니다. array()를 정의하기 전에 배열을 사용하지 마십시오. 질문 할 때 귀하의 기능이 무엇을해야하는지 설명하십시오. 여기에서 오류를 재현 할 수 없습니다. –

+0

@tokam : 팁을 주셔서 감사합니다. 추가해야하는 'notice'를 복제하십시오 : error_reporting (E_ALL); ini_set ('display_errors', '1'); ' – JoshDarrow

+0

통지를 보았습니다. 우선 정의하지 않고 배열을 사용했기 때문입니다. –

답변

0

이 오류를 제거하려면 함수의 시작이 줄을 추가 :

$array = array(); 

이 라인을 교체 :이와

$array[$x] .= $my_char; 

:

$array[$x] = isset($array[$x])? $array[$x].$my_char : $my_char; 

재귀에 도움이 필요하면 원하는 행동을 설명해야합니다.

+0

고마워, 그게 완벽 했어! – JoshDarrow