2011-03-19 3 views
1

Je suis en train d'analyser la chaîne suivante, mais essaye en même temps de se débarrasser du décalage non défini courant sur le tableau d'index. J'apprécierais de l'aide avec le problème de décalage non défini.php recursion - notice: undefined offset: 20 tableau

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

écrire des noms de variables en minuscules. n'utilisez pas de tableaux avant de les définir array(); Décrivez ce que votre fonction est supposée faire en posant une question. Impossible de reproduire votre erreur ici. –

+0

@tokam: Merci pour les conseils, pour répliquer le 'notice' que vous devez ajouter:' error_reporting (E_ALL); ini_set ('display_errors', '1'); ' – JoshDarrow

+0

J'ai vu l'avis, c'est parce que vous utilisez le tableau sans le définir en premier. –

Répondre

0

Pour se débarrasser des erreurs, ajoutez cette ligne au début de votre fonction:

$array = array(); 

et remplacer cette ligne:

$array[$x] .= $my_char; 

avec ceci:

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

Pour vous aider avec votre récursivité, vous Je vais devoir décrire son comportement souhaité.

+0

Merci, c'était parfait! – JoshDarrow