2010-08-26 196 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之後的第一行。