Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

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


    } 
    ?>
share|improve this question
4  
The best way would be to use a DOM parser, for example php.net/manual/en/book.dom.php –  jli Dec 9 '11 at 17:13
1  
    
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. –  jap1968 Dec 9 '11 at 17:15
    
@jap1968 the data.htm file contains only the html table I need to use –  JDV590 Dec 9 '11 at 17:17
    
@jli can you see my edits above and offer any advice...thanks –  JDV590 Dec 9 '11 at 18:14

3 Answers 3

up vote 12 down vote accepted

I've updated your edit to fix it.

For a live demo, see http://codepad.viper-7.com/Vu5WdK

<?php
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');

    function tdrows($elements)
    {
        $str = "";
        foreach ($elements as $element)
        {
            $str .= $element->nodeValue . ", ";
        }
        return $str;
    }
    foreach ($items as $node)
    {
        echo tdrows($node->childNodes) . "<br />";
    }
}
getdata();
?>
share|improve this answer
    
perfect..thank you –  JDV590 Dec 12 '11 at 16:28

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.

share|improve this answer

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

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.