"td", "eduName" => "td", "eduLevel" => "td", "eduForm" => "td", // "numberBF" => "th", // "numberBFF" => "th", // "numberBR" => "th", // "numberBRF" => "th", // "numberBM" => "th", // "numberBMF" => "th", // "numberP" => "th", // "numberPF" => "th", "numberAll" => ["th", "td"] ]; public function __construct(string $html, string $template) { libxml_use_internal_errors(true); $dom = new \DOMDocument(); $dom->loadHTML(mb_convert_encoding($html,'HTML-ENTITIES','UTF-8')); $this->xpath = new \DOMXPath($dom); $this->template = $template; } private function parse(): array { $data = array(); foreach (self::FIELDS as $field => $tag) { if (!is_array($tag)) { $data[$field] = $this->xpath->query($this->template . $tag . "[@itemprop=\"$field\"]"); } else { $th = $this->xpath->query($this->template . $tag[0] . "[@itemprop=\"$field\"]"); $td = $this->xpath->query($this->template . $tag[1] . "[@itemprop=\"$field\"]"); $data[$field] = $th->length > $td->length ? $th : $td; } } return $data; } public function getDataTable() : array { $data = $this->parse(); $records = array(); // var_dump($data['eduName']->item(0)); // exit(0); $equel = $data['eduName']->length; foreach ($data as $field) { if ($field->length == 0) { return []; } if ($field->length != $equel) { return []; } } for ($i = 0; $i < $data['eduCode']->length; $i++) { $contingentRow = new ContingentRow( $data['eduCode']->item($i)->textContent, $data['eduName']->item($i)->textContent, $data['eduLevel']->item($i)->textContent, $data['eduForm']->item($i)->textContent, (int)$data['numberAll']->item($i)->textContent ); $records[] = $contingentRow->getData(); } return $records; } }