2010-08-26 5 views
0

J'ai une foreach et puis une foreach à l'intérieur d'une foreach. Le premier foreach semble fonctionner correctement et je n'ai pas d'erreurs php. Cependant, dans chaque boucle foreach suivante, j'obtiens une erreur Message: Undefined property: stdClass::$filename (remplacez le nom de fichier par chaque identificateur unique). Quelqu'un peut-il m'aider et me dire ce que je fais mal? MerciForeach boucles à l'intérieur foreach boucles me donnant des problèmes dans codeigniter

if($query = $this->db->get()){ 

     foreach ($query->result() as $row) 
     { 
      $textable = $row->text_table; 
     } 

     $this->db->distinct('filename'); 
     $this->db->select('location'); 
     $this->db->from('TranslateData'); 

     if($query1 = $this->db->get()){ 

      foreach($query1->result() as $row1){ 

       $this->db->select('string_id'); 
       $this->db->select($textable); 
       $this->db->where('filename', $row1->filename); 
       $this->db->from('TranslateData'); 

       $query2 = $this->db->get(); 

       $xml = '<?xml version="1.0" encoding="utf-8" ?>'.PHP_EOL; 
       $xml .= '<data>'.PHP_EOL; 

       foreach($query2 as $row2){ 

        $xml .= '<item>'.PHP_EOL; 
        $xml .= ' <name>'.$row2->string_id.'</name>'.PHP_EOL; 
        $xml .= ' <copy><![CDATA['.$row2->$textable.']]></copy>'.PHP_EOL; 
        $xml .= '</item>'.PHP_EOL; 

       } 

       $xml .= '</data>'.PHP_EOL; 

       $path = str_replace('/', '', $row1->location); 

       $this->save_xml($path, $row1->filename, $xml); 

      } 
     } 
    } 
+0

Cela ne semble pas être défini '$ row1-> filename', essayez' var_dump ($ row1) 'pour voir le contenu de cela. – RobertPitt

+1

Robert m'a battu à ça. Je déconseille de construire XML comme ça aussi. Essayez et utilisez quelque chose comme DomDocument de PHP5 –

+0

DomDocument est le moyen idéal pour construire des documents Xml, idéal pour la validation et l'assainissement. – RobertPitt

Répondre

1

Vous avez montré deux façons d'appeler un resultset. J'espère que ça va. Je crois que votre méthode resultset de la bibliothèque DB (exemples ci-dessus) pourrait retourner une référence au même tableau chaque fois que vous l'itérez. Ainsi, lorsque vous l'avez appelé dans une itération existante, il a perdu la référence $ row1 d'origine. ce qui signifie $ row1 == $ row2 - ce qui a provoqué l'erreur non définie.

Essayez print_r ou comme suggéré par @RobertPitt. placez-le à la première ligne après la deuxième foreach.

Questions connexes