Vilas
Vilas

Reputation: 837

Loop through json data from database on php page

I've this column in database table:

value=[
       {"srno":1,
        "name":"Gaspari Aminolast ",
        "quantity":"2",
        "price":"2920.0000",
        "total_bill":5840
       },
       {"srno":2,
        "name":"Gaspari Amino Max ",
         "quantity":"2",
         "price":"2640.0000",
         "total_bill":5280
       },
       {"srno":3,
        "name":"Myofusion 10Lbs",
        "quantity":"2",
        "price":"8400.0000",
        "total_bill":16800}
]

And my php code is:

<?php
    $getbill="select value from $tbl where bill_id='$_GET[id]' ";
    $result=mysql_query($getbill)or die(mysql_error());
    $results = array();
    while($row=mysql_fetch_array($result))
    {
         $results[] = json_decode($row['value']);
    }
    print_r($results);
    foreach($results as $key=>$value){
?>
<tbody>
    <tr>
        <td><?php echo $value['srno'];?></td>
        <td><?php echo $value['name'];?></td>
        <td><?php echo $value['quantity'];?></td>
        <td><?php echo $value['price'];?></td>
        <td ><?php echo $value['total_bill'];?></td>
    </tr>
</tbody>
<?PHP   
    }
?>

I'm confused with how I loop through this and print all it contains.

print_r() :

Array ( 
      [0] => Array ( 
         [0] => stdClass Object ( 
                       [srno] => 1 
                       [name] => Gaspari Aminolast 
                       [quantity] => 2 
                       [price] => 2920.0000 
                       [total_bill] => 5840 
                  ) 
          [1] => stdClass Object ( 
                       [srno] => 2 
                       [name] => Gaspari Amino Max 
                       [quantity] => 2 
                       [price] => 2640.0000 
                       [total_bill] => 5280 
                  ) 
          [2] => stdClass Object ( 
                       [srno] => 3 
                       [name] => Myofusion 10Lbs 
                       [quantity] => 2 
                       [price] => 8400.0000 
                       [total_bill] => 16800 
                   ) 
       )
)

Upvotes: 0

Views: 1678

Answers (3)

Rajeev Ranjan
Rajeev Ranjan

Reputation: 4142

use second argument in json_decode function,set it to TRUE to get as array

$json='[{"srno":1,"name":"Gaspari Aminolast ","quantity":"2","price":"2920.0000","total_bill":5840},{"srno":2,"name":"Gaspari Amino Max ","quantity":"2","price":"2640.0000","total_bill":5280},{"srno":3,"name":"Myofusion 10Lbs","quantity":"2","price":"8400.0000","total_bill":16800}]';


echo '<pre>';print_r(json_decode($json,TRUE));

output:

Array
(
    [0] => Array
        (
            [srno] => 1
            [name] => Gaspari Aminolast 
            [quantity] => 2
            [price] => 2920.0000
            [total_bill] => 5840
        )

    [1] => Array
        (
            [srno] => 2
            [name] => Gaspari Amino Max 
            [quantity] => 2
            [price] => 2640.0000
            [total_bill] => 5280
        )

    [2] => Array
        (
            [srno] => 3
            [name] => Myofusion 10Lbs
            [quantity] => 2
            [price] => 8400.0000
            [total_bill] => 16800
        )

)

Upvotes: 1

RiggsFolly
RiggsFolly

Reputation: 94682

If you notice, now I reformatted the value column, each value column contains a JSON string denoting an array of objects.

So for each value you store in the $results array you neeed to do another loop to examine the inner array of objects. Like so:

<?php
    $getbill="select value from $tbl where bill_id='{$_GET[id]}' ";
    $result=mysql_query($getbill)or die(mysql_error());
    $results = array();
    while($row=mysql_fetch_array($result))
    {
         $results[] = json_decode($row['value']);
    }
    print_r($results);

    echo '<tbody>';

    foreach($results as $value) :
        foreach( $value as $object) :
?>
    <tr>
        <td><?php echo $object->srno;?></td>
        <td><?php echo $object->name;?></td>
        <td><?php echo $object->quantity;?></td>
        <td><?php echo $object->price;?></td>
        <td><?php echo $object->total_bill;?></td>
    </tr>

<?php   
        endforeach;
    endforeach;
?>
</tbody>

I also moved the <tbody> and </tbody> outside the loop as that would also have caused a problem with your layout.

Upvotes: 0

Christian
Christian

Reputation: 1577

The array your trying to loop over seems to be in another array. Try this or @RiggsFolly's answer

<table>
<?php
    $getbill="select value from $tbl where bill_id='$_GET[id]' ";
    $result=mysql_query($getbill)or die(mysql_error());
    $results = array();
    while($row=mysql_fetch_array($result))
    {
         $results = json_decode($row['value']);
    }
    print_r($results);
    foreach($results as $key=>$value){
?>

    <tr>
        <td><?php echo $value['srno'];?></td>
        <td><?php echo $value['name'];?></td>
        <td><?php echo $value['quantity'];?></td>
        <td><?php echo $value['price'];?></td>
        <td ><?php echo $value['total_bill'];?></td>
    </tr>

<?PHP   
    }
?>
</table>

Upvotes: 0

Related Questions