php foreach проблема - PullRequest
       1

php foreach проблема

1 голос
/ 15 июля 2011

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

Второй foreach запускается 4 раза (начиная с sizeof($pages) == 4), при этом он должен запускаться только один раз. Я получил этот код из примера сценария, где table.result-liste встречается на странице несколько раз. В моем случае это происходит только один раз, поэтому имхо нет необходимости в foreach. print_r($data) печатает одно и то же 4 раза , и в этом нет необходимости.

Далее я пытаюсь сделать то же самое без foreach, но он просто печатает no, поэтому, похоже, другой ответ, и я не уверен, почему.

foreach( $pages as $page )
        {
            $p = $this->create_url($codes[0], $price, $page); //pass page number along          
            $p_html = file_get_html($p);

            $row = $p_html->find("table[class=result-liste] tr");

            //RUNS OK BUT NO NEED TO DO IT FOUR TIMES.
            //CLASS RESULT-LISTE ONLY OCCURS ONCE ANYWAY
            foreach( $p_html->find("table[class=result-liste] tr") as $row)
            {
                //grab only rows where there is a link 
                if( $row->find('td a') )
                {
                    $d_price = $this->get_price($row->first_child());
                    $d_propid = $this->get_prop_id($row->outertext);

                    $data = array(
                        "price"     => $d_price,
                        "prop_id"   => $d_propid
                    );

                    print_r($data);
                }                                               
            }

            //MY ATTEMPT TO AVOID THE SECOND FOREACH DOES NOT WORK ...
            $row = $p_html->find("table[class=result-liste] tr");
            if( is_object($row) && $row->find('td a')) print "yes ";
            else print "no ";           
        }

Ответы [ 2 ]

2 голосов
/ 15 июля 2011

Даже если table[class=result-liste] встречается на вашей странице только один раз, этот оператор поиска ищет элементы <tr>, которые являются строками таблицы. Поэтому, если в вашей таблице только одна строка, вам понадобится foreach.

$p_html->find("table[class=result-liste] tr")
0 голосов
/ 15 июля 2011

Ваш код

        foreach( $p_html->find("table[class=result-liste] tr") as $row)
        {
            //grab only rows where there is a link 
            if( $row->find('td a') )
            {
                $d_price = $this->get_price($row->first_child());
                $d_propid = $this->get_prop_id($row->outertext);

                $data = array(
                    "price"     => $d_price,
                    "prop_id"   => $d_propid
                );

                print_r($data);
            }                                               
        }

Замените вышеуказанный код на МОЙ код

        $asRow = $p_html->find("table[class=result-liste] tr");
        $row = $asRow[0];

            //grab only rows where there is a link 
            if( $row->find('td a') )
            {
                $d_price = $this->get_price($row->first_child());
                $d_propid = $this->get_prop_id($row->outertext);

                $data = array(
                    "price"     => $d_price,
                    "prop_id"   => $d_propid
                );

                print_r($data);
            }                                               

Попробуйте с этим.

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