Nandha
Nandha

Reputation: 1

Getting data from html file and print using php

My scenario is,

  1. Read html page content using php

  2. Retrieving the required data from the html using DOM parser concept by using php

  3. Displaying the retrieved data in the same php page (the content as like in html page)

I have done all 3 steps, but while displaying the data i didn't get my required format, Here is all of my code (html,php):

Html:

<html>
<head>
<title>data</title>
</head>
<body>
<table border='1'>
    <tr><th>Place</th><th>Temperature</th></tr>
    <tr><td class='date'>25-08-2011</td></tr>
    <tr><td class='city'>A</td><td class='temp'>30 c</td></tr>
    <tr><td class='city'>B</td><td class='temp'>29 c</td></tr>
    <tr><td class='date'>26-08-2011</td></tr>
    <tr><td class='city'>A</td><td class='temp'>28 c</td></tr>
    <tr><td class='city'>B</td><td class='temp'>28 c</td></tr>  
</table>        
</body>
</html>

Php code:

<?php
include('simple_html_dom.php');
$html = file_get_html('data.html');

$sdate[0]="";
$city[0]="";
$temp[0]="";
$c=0;

foreach($html->find('td[class=date]') as $e)
{
    $sdate[$c]=$e->innertext;
    $c=$c+1;
}

$c=0;
foreach($html->find('td[class=city]') as $e)
{
    $city[$c]=$e->innertext;
    $c=$c+1;
}

$c=0;
foreach($html->find('td[class=temp]') as $e)
{
    $temp[$c]=$e->innertext;
    $c=$c+1;
}   
for($i=0;$i<$c;$i++)
{
    echo 'Date:'. $sdate[$i]."<br>";
    echo 'City:'.$city[$i]  .', Temp:' . $temp[$i]."<br>" ;
}

?>

Output:

Date:25-08-2011
City:A, Temp:30 c
Date:26-08-2011
City:B, Temp:29 c
Date:
City:A, Temp:28 c
Date:
City:B, Temp:28 c

But, I want to print the result like this format,

Date:25-08-2011
City:A, Temp:30 c
City:B, Temp:29 c
Date:26-08-2011
City:A, Temp:28 c
City:B, Temp:28 c

Please anybody help me...

Thanks, Nandha

Upvotes: 0

Views: 3366

Answers (3)

mmtauqir
mmtauqir

Reputation: 9309

Try this:

<?php
include('simple_html_dom.php');
$html =  file_get_html('data.html');

foreach($html->find('td') as $e)
{
   if ($e->class == 'date')
      echo 'Date:'.$e->innertext.'<br>';
   else if ($e->class == 'city')
      echo 'City:'.$e->innertext;
   else if ($e->class == 'temp')
      echo 'Temp:'.$e->innertext.'<br>';
}
?>

Upvotes: 0

Vladimir
Vladimir

Reputation: 836

You need to rewrite your logic. I already did that for you :)

$tree = array();

foreach ($html->find('td') as $e) {
    if ($e->class == 'date') {
        $date = $e->innertext;
    }

    if ($e->class == 'city') {
        $city = $e->innertext;
    }

    if ($e->class == 'temp') {
        $tree[$date][$city] = $e->innertext;
    }
}

Result will be something like this:

Array
(
    [25-08-2011] => Array
        (
            [A] => 30 c
            [B] => 29 c
        )

    [26-08-2011] => Array
        (
            [A] => 28 c
            [B] => 28 c
        )

)

Upvotes: 2

Vadiklk
Vadiklk

Reputation: 3764

Your problem you are printing in a for loop each element in each of the arrays. It continues until the longest array, thus displaying a date, a city and a temp each time.

Upvotes: 0

Related Questions