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

时间:2010-08-26 08:50:20

标签: php codeigniter

我有一个foreach,然后foreach在foreach里面。第一个foreach似乎工作正常,我没有得到任何PHP错误。但是在每个后​​续的foreach循环中,我得到一个Message: Undefined property: stdClass::$filename错误(用每个标识符替换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 个答案:

答案 0 :(得分:1)

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

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

我相信,只要你迭代它,你的DB库结果集方法(上面的例子)就可以返回对同一个数组的引用。因此,当您在现有迭代中调用它时,它会丢失原始的$ row1引用。这意味着,$ row1 == $ row2 - 导致了未定义的错误。

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