2010-08-26 173 views
0

我有一个foreach,然后foreach里的foreach。第一个foreach似乎工作正常,我没有得到任何PHP错误。但是在每个后​​续的foreach循环中,我得到一个Message: Undefined property: stdClass::$filename错误(用每个标识符替换文件名)。有人能帮助我,并告诉我我做错了什么吗?谢谢foreach循环中的foreach循环给我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

这似乎没有定义'$ row1-> filename',请尝试'var_dump($ row1)'来查看它的内容。 – RobertPitt 2010-08-26 08:52:38

+1

罗伯特打败了我。我建议不要这样构建XML。尝试并使用像PHP5的DomDocument – 2010-08-26 09:05:59

+0

DomDocument是构建Xml文档的完美方式,对验证和卫生非常有用。 – RobertPitt 2010-08-26 10:24:16

回答

1

你已经显示了调用结果集的两种方法。我希望这很好。

foreach($query1->result() as $row1) 
foreach($query2 as $row2) 

我相信,你的数据库库结果集方法(上面的例子)可能会返回引用相同的数组,每当你迭代它。所以,当你在现有的迭代中调用它时,它会丢失原始的$ row1引用。这意味着,$ row1 == $ row2 - 导致未定义的错误。

尝试使用print_r或按@RobertPitt建议。把它放在第二个foreach之后的第一行。