Построить массив из проанализированной HTML-таблицы - PullRequest
0 голосов
/ 01 февраля 2011

Я только начал пытаться учить себя PHP и мне нужна небольшая помощь.Используя DOM, я пытаюсь разобрать таблицу HTML, чтобы поместить результаты в базу данных MySQL, но у меня возникли проблемы.Я могу отобразить каждую строку таблицы следующим образом:

foreach ($html->find('table') as $table)
foreach ($table->find("tr") as $rows)
    echo $rows."<br />";

Данные имеют следующую структуру:

<tr>
<a href=http://some link>text1</a>
<td class="...">text2</td>
<td class="...">text3</td>
<td class="...">text4</td>
</tr>

Я пытаюсь получить ссылку и текст1-4 вмассив, но не могу понять это.Любая помощь будет оценена.--Edit -
Это макет таблицы, который я пытаюсь разбить.

<tr>
<th class="school first">
    <ahref="/local/team/home.aspx?schoolid=472d8593">Aberdeen</a>
</th>
<td class="mascot">Bulldogs</td>
<td class="city">Aberdeen</td>
<td class="state last">MS</td>
</tr>

Ответ jnpcl дает мне

  ROW
  TEXT: Bulldogs
  TEXT: Aberdeen
  TEXT: MS

, но без ссылки.Возможно, я не был достаточно конкретен в своем первоначальном вопросе, но, как я уже сказал, я пытаюсь учиться, и я обычно делаю это, прыгая в глубокий конец бассейна.

1 Ответ

2 голосов
/ 01 февраля 2011

Обновление: теперь должно работать с обновленным образцом кода OP.

Это должно помочь вам:

настольный array.php

<code><?php
    // SimpleHTMLDom Library
    require_once('lib/simple_html_dom.php');

    // Source Data
    $source = 'table-array-data.htm';

    // Displays Extra Debug Info
    $dbg = 1;

    // Read DOM
    $html = file_get_html($source);

    // Confirm DOM
    if ($html) {
        // Debug Output
        if ($dbg) { echo '<pre>'; }

        // Loop for each <table>
        foreach ($html->find('table') as $table) {

            // Debug Output
            if ($dbg) { echo 'TABLE' . PHP_EOL; }

            // Loop for each <tr>
            foreach ($table->find('tr') as $row) {

                // Debug Output
                if ($dbg) { echo '  ROW' . PHP_EOL; }

                // Loop for each <th>
                foreach ($row->find('th') as $cell) {

                    // Look for <a> tag
                    $link = $cell->find('a');

                    // Found a link
                    if (count($link) == 1) {

                        // Debug Output
                        if ($dbg) { echo '      LINK: ' . $link[0]->innertext . ' (' . $link[0]->href . ')' . PHP_EOL; }
                    }

                }

                // Loop for each <td>
                foreach ($row->find('td') as $cell) {

                    // Debug Output
                    if ($dbg) { echo '      CELL: ' . $cell->innertext . PHP_EOL; }
                }
            }
        }
        // Debug Output
        if ($dbg) { echo '
'; } } ?>

table_array_data.htm

<table>
    <tr class="first">
        <th class="school first"><a href="/local/team/home.aspx?schoolid=472d8593-9099-4925-81e0-ae97cae44e43&amp">Aberdeen</a></th>
        <td class="mascot">Bulldogs</td>
        <td class="city">Aberdeen</td>
        <td class="state last">MS</td>
    </tr>
</table>

выход

TABLE
    ROW
        LINK: Aberdeen (/local/team/home.aspx?schoolid=472d8593-9099-4925-81e0-ae97cae44e43&)
        CELL: Bulldogs
        CELL: Aberdeen
        CELL: MS
...