Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get Data from Array PHP

I cant quite get my data from an array, it just shows a blank list of 3 list items when I run my foreach loop.

When I print my array it looks like this ->

Array
(
    [1] => Array
        (
            [id] => 10
            [orderinfo] => Array
            [userid] => 210
            [date] => 2013-06-20 13:46:27
        )

    [2] => Array
        (
            [id] => 18
            [orderinfo] => helo
            [userid] => 210
            [date] => 2013-06-20 15:04:58
        )

    [3] => Array
        (
            [id] => 19
            [orderinfo] => {"order":[{"id":"2","name":"Basil Cress","qty":"1"},{"id":"4","name":"Sakura Mix","qty":"1"},{"id":"6","name":"Beetroot Shoots","qty":2},{"id":"28","name":"Celery","qty":2},{"id":"24","name":"Orange Capsicums","qty":"1"}]}
            [userid] => 210
            [date] => 2013-06-20 15:06:46
        )

)

My code so far..

foreach ($orderdata as $item) {

    $orderinfo = json_decode($item->orderinfo, true);

    $orderitem[] = array(
        'date' => $item->date,
        'productname' => $orderinfo['name'],
        'productqty' => $orderinfo['qty'],
    );              
}


echo "<pre>";
print_r($orderdata);
echo "</pre>";
?>



<?php foreach ($orderitem as $orderitems) {   ?>
  <li> 
    <?php echo  $orderitems['date']; ?>
  </li>
<?php }; ?>
like image 781
Brent Avatar asked Sep 08 '25 05:09

Brent


2 Answers

Try to declare your array before the loop like this. Are you already doing this?

$orderitem = array();
foreach ($orderdata as $item) {

    $orderinfo = json_decode($item->orderinfo, true);

    $orderitem[] = array(
        'date' => $item->date,
        'productname' => $orderinfo['name'],
        'productqty' => $orderinfo['qty'],
    );              
}

You can also try to populate your array differently, like this:

array_push($orderitem,array(
            'date' => $item->date,
            'productname' => $orderinfo['name'],
            'productqty' => $orderinfo['qty'],
        ));
like image 99
Pablo S G Pacheco Avatar answered Sep 10 '25 11:09

Pablo S G Pacheco


Look at the structure of the the JSON for $orderInfo. It is a nested array. So $orderInfo['name'] doesn't exist. You want $orderInfo[0]['name'] or some other numerical index to fill in the data.

This is an array of objects which gets decoded to an array of associative arrays. You need to travel one more level down to get the name.

[
    {"id":"2","name":"Basil Cress","qty":"1"},
    {"id":"4","name":"Sakura Mix","qty":"1"},
    {"id":"6","name":"Beetroot Shoots","qty":2},
    {"id":"28","name":"Celery","qty":2},
    {"id":"24","name":"Orange Capsicums","qty":"1"}
]
like image 36
Schleis Avatar answered Sep 10 '25 11:09

Schleis