14

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

So i am going with the DOM approach. Here is what I have so far:

  <?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 />";

       }

    } 
?>

The issue I am having is that I only want to select the td's from each table row. I am trying to achieve this with a nested loop. unfortunately It is printing the text of every tag on the page how ever many times as there are tags. how can i get it so its only printing the td of each tr and not every td on the dom?


I need to use an html table as the source of my data because I don't have access to the database. I figure to be able to query data from the html table I need create a function to convert the table into an array, or a multidimensional array.

I have the basic Idea I think but I need some help finishing the code to return an array based off the html table.

Also If you have a better way of doing this other than converting the table to an array then please let me know

Here is the idea I had so far:

 <?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 ???


    } 
    ?>
7
  • 4
    The best way would be to use a DOM parser, for example php.net/manual/en/book.dom.php Commented Dec 9, 2011 at 17:13
  • 1
    stackoverflow.com/questions/3627489/php-parse-html-code Commented Dec 9, 2011 at 17:14
  • Do 'data.htm' only contains a table and its contents, or it is a full html page with many more elements? Anyway, your code is still lacking all the part related to the parsing of the table elements. IMO, I would look for an alternative way: I do not like the idea of reading an html table. Commented Dec 9, 2011 at 17:15
  • @jap1968 the data.htm file contains only the html table I need to use Commented Dec 9, 2011 at 17:17
  • @jli can you see my edits above and offer any advice...thanks Commented Dec 9, 2011 at 18:14

3 Answers 3

29

I've updated your edit to fix it.

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();
Sign up to request clarification or add additional context in comments.

2 Comments

Declaring a function in a function is bad idea. Calling getData(); a second time will result in a fatal error Fatal error: Cannot redeclare tdrows() .
Feel free to fix it.
1

One way to make this easier is to use a dom parser http://simplehtmldom.sourceforge.net/ .

You are still going to have to extract the information into an array but this will make it easier to iterate through the elements one by one.

1 Comment

This nudge could have been a comment under the question instead of an answer.
-2

You should consider using XML.

It is much easier than HTML table and much more sufficient.

Example: http://www.php.net/manual/en/simplexml.examples-basic.php

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.