Циклы foreach внутри циклов foreach, вызывающие у меня проблемы с codeigniter - PullRequest
0 голосов
/ 26 августа 2010

У меня есть 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 Ответ

1 голос
/ 26 августа 2010

Вы показали два способа вызова набора результатов. Я надеюсь, что это хорошо.

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

Я полагаю, что метод набора результатов вашей библиотеки БД (примеры выше) может возвращать ссылку на один и тот же массив всякий раз, когда вы выполняете его. Поэтому, когда вы вызывали его в рамках существующей итерации, он потерял исходную ссылку на $ row1. что означает, $ row1 == $ row2 - что вызвало неопределенную ошибку.

Попробуйте print_r или как предложено @RobertPitt. поместите его в первую строку после второго foreach.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...