HTML-таблица для php-массива

-------------- EDIT ------------------------

Итак, я перехожу к подходу DOM. Вот что я до сих пор:

  <?php function getdata(){
    $contents = file_get_contents('internatdata.htm');
    //create a DOM based off of the string from the html table
     $DOM = new DOMDocument;
   $DOM->loadHTML($contents);

   //get all tr and td
   $items = $DOM->getElementsByTagName('tr');
   $tds = $DOM->getElementsByTagName('td');

   function tdrows($elements){
       $str = "";
       for ($ii =0; $ii < $elements->length; $ii++){
            $str .= $elements->item($ii)->nodeValue . ",";


           }
          return $str;
       }

   for ($i = 0; $i < $items->length; $i++){


       echo tdrows($tds) . "; <br />";

       }

    } 
?>

Проблема, с которой я сталкиваюсь, заключается в том, что я хочу только выбрать td из каждой строки таблицы. Я пытаюсь достичь этого с помощью вложенного цикла. К сожалению, он печатает текст каждого тега на странице, как много раз, когда есть теги. как я могу получить его так, чтобы он печатал только td каждого tr, а не каждый td на dom?


Мне нужно использовать html-таблицу в качестве источника моих данных, потому что у меня нет доступа к базе данных. Я полагаю, что могу запросить данные из таблицы html, мне нужно создать функцию для преобразования таблицы в массив или многомерный массив.

У меня есть основная идея, я думаю, но мне нужна помощь в завершении кода, чтобы вернуть массив, основанный на таблице html.

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

Вот моя идея:

 <?php
 function getdata(){

    $contents = file_get_contents('data.htm');
    //add delimiters (semicolon for a row and comma for a cell) ???

    $stripped = strip_tags($contents);

    //explode into an array based off the delimiters above ???


    } 
    ?>

Ответы

Ответ 1

Я обновил ваше редактирование, чтобы исправить его.

Для живой демонстрации см. http://codepad.viper-7.com/Vu5WdK

function tdrows($elements)
{
    $str = "";
    foreach ($elements as $element) {
        $str .= $element->nodeValue . ", ";
    }

    return $str;
}

function getdata()
{
    $contents = "<table><tr><td>Row 1 Column 1</td><td>Row 1 Column 2</td></tr><tr><td>Row 2 Column 1</td><td>Row 2 Column 2</td></tr></table>";
    $DOM = new DOMDocument;
    $DOM->loadHTML($contents);

    $items = $DOM->getElementsByTagName('tr');

    foreach ($items as $node) {
        echo tdrows($node->childNodes) . "<br />";
    }
}

getdata();

Ответ 2

Один из способов облегчить использование парсера dom http://simplehtmldom.sourceforge.net/.

Вам все равно придется извлекать информацию в массив, но это упростит повторение элементов по одному.