34

I have an array of objects; running print_r() returns the output below;

Array
(
    [0] => stdClass Object
        (
            [sm_id] => 1
            [c_id] => 1
        )
    [1] => stdClass Object
        (
            [sm_id] => 1
            [c_id] => 2
        )
)

How to loop through the result and access the student class objects?

nyedidikeke
  • 5,016
  • 7
  • 33
  • 49
AttikAttak
  • 767
  • 2
  • 12
  • 20

4 Answers4

47

Use

//$arr should be array as you mentioned as below
foreach($arr as $key=>$value){
  echo $value->sm_id;
}

OR

//$arr should be array as you mentioned as below
foreach($arr as $value){
  echo $value->sm_id;
}
GBD
  • 15,281
  • 2
  • 41
  • 49
6

Looping over arrays and objects is a pretty common task, and it's good that you're wanting to learn how to do it. Generally speaking you can do a foreach loop which cycles over each member, assigning it a new temporary name, and then lets you handle that particular member via that name:

foreach ($arr as $item) {
    echo $item->sm_id;
}

In this example each of our values in the $arr will be accessed in order as $item. So we can print our values directly off of that. We could also include the index if we wanted:

foreach ($arr as $index => $item) {
    echo "Item at index {$index} has sm_id value {$item->sm_id}";
}
Sampson
  • 251,934
  • 70
  • 517
  • 549
2

Assuming your sm_id and c_id properties are public, you can access them by using a foreach on the array:

$array = array(/* objects in an array here */);
foreach ($array as $obj) {
    echo $obj->sm_id . '<br />' . $obj->c_id . '<br />';
}
YakovL
  • 5,213
  • 10
  • 46
  • 71
imkingdavid
  • 1,374
  • 11
  • 24
2

Recursive traverse object or array with array or objects elements:

function traverse(&$objOrArray)
{
    foreach ($objOrArray as $key => &$value)
    {
        if (is_array($value) || is_object($value))
        {
            traverse($value);
        }
        else
        {
            // DO SOMETHING
        }
    }
}
R3tep
  • 11,061
  • 9
  • 38
  • 69
Ronny Sherer
  • 7,283
  • 1
  • 19
  • 9