Задать вопрос
Ответы пользователя по тегу PHP
  • В чем может быть проблема(массив, foreach)?

    cimmwolf
    @cimmwolf
    Веб-разработчик
    По всей видимости вам нужно во втором foreach дополнять существующие элементы массива информацией со страницы матча. Вы же добавляете информацию о матче в конец массива $matches.

    Чтобы менять текущий элемент массива в цикле foreach вам нужно добавить передачу элемента массива в foreach по указателю и немного изменить код. Я думаю, что вот так он заработает:
    <?php
    use DiDom\Document;
    class Task_VKparse extends Minion_Task {
    
        protected static $_timeout = 1;
    
        protected function _execute(array $params) {
    
            //Получаем id матчей
            $html = new Document('http://www.gosugamers.net/dota2/gosubet', TRUE);
            $elements = $html->find('div.box')[0]->find('table tbody tr');
            $matches = array();
    
            foreach ($elements as $el) {
                $gg_link = $el->find('td a')[0]->attr('href');
                //Преобразование данных
                $match = array(
                    'gg_link' => $gg_link,
                );
                $matches[] = $match;
            }
    
    
            // Переход на страницу матча
            foreach ($matches as &$match) {
                // Получение html кода страницы матча
                $html = new Document('http://www.gosugamers.net' . $match['gg_link'], TRUE);
    
                $format = $html->find('p.bestof')[0]->text();
                $streams = $html->find('span.match-stream-tab');
    
                $match['format'] = (new GG)->format($format);
                $match['team1'] = $html->find('div.opponent1 h3')[0]->text();
                $match['team2'] = $html->find('div.opponent2 h3')[0]->text();
                $match['tournament'] = $html->find('fieldset legend a')[0]->text();
                $match['stream_ru'] = (new GG)->stream_ru($streams);
                $match['stream_en'] = (new GG)->stream_en($streams);
                
                // Minion_CLI::write(var_dump($matches));
    
            }
    
            // Запись результата в БД
           foreach ($matches as $match) {
                $match_orm = new Model_Match;
    
                // Загрузка матча, если он уже есть в БД
                $match_orm->where('gg_link', '=', $match['gg_link'])->find();
    
                // Внесение новых данных о матче
                $match_orm->values($match);
    
               $match_orm->save();
            }
        }
    
    }
    Ответ написан
    Комментировать