代码之家  ›  专栏  ›  技术社区  ›  Drew Rich

Foreach循环中的Foreach循环给了我codeigniter中的问题

  •  0
  • Drew Rich  · 技术社区  · 16 年前

    我有一个foreach,然后是foreach里面的foreach。第一个foreach似乎工作正常,我没有得到任何php错误。然而,在随后的每个foreach循环中,我得到一个 Message: Undefined property: stdClass::$filename

        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);
    
                }
            }
        }   
    
    1 回复  |  直到 16 年前
        1
  •  1
  •   thevikas    16 年前

    您已经展示了两种调用结果集的方法。我希望那是好的。

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

    我相信,您的DB library resultset方法(上面的示例)可以在迭代时返回对同一数组的引用。因此,当您在现有迭代中调用它时,它丢失了原来的$row1引用。这意味着,$row1==$row2-这导致了未定义的错误。

    请尝试打印或按照@RobertPitt的建议。把它放在第二个foreach后面的第一行。

    推荐文章