How do you iterate through an array of objects in php?

I'm very new to PHP and I need your help! I need to write backend for my app that receives json post and write data to json file. And I'm stuck with looping through array.

$postData = file_get_contents["php://input"];
$request = json_decode[$postData];
var_damp[$request]

shows array:

array[2] {
  [0]=>
  object[stdClass]#1 [8] {
    ["name"]=>
    string[11] "Alex Jordan"
    ["email"]=>
    string[14] ""
    ["phone"]=>
    int[123456789]
    ["street"]=>
    string[12] "street, str."
    ["city"]=>
    string[7] "Chicago"
    ["state"]=>
    string[7] "Chicago"
    ["zip"]=>
    string[5] "07202"
    ["$$hashKey"]=>
    string[8] "object:3"
  }
  [1]=>
  object[stdClass]#2 [8] {
    ["name"]=>
    string[15] "Michael Jonhson"
    ["email"]=>
    string[17] ""
    ["phone"]=>
    float[11987654321]
    ["street"]=>
    string[12] "street, str."
    ["city"]=>
    string[11] "Los Angeles"
   ["state"]=>
   string[10] "California"
   ["zip"]=>
   string[5] "27222"
   ["$$hashKey"]=>
   string[8] "object:4"
 }
}

I'm trying to loop through the objects and getting error

Object of class stdClass could not be converted to string

Here is how I'm trying to do it:

    foreach[$request as $i => $i_value] {
        echo $i_value;
    }

asked Jul 31, 2015 at 19:08

1

$i_value is the object. Because it's an object you cannot just echo it [unlike in JavaScript where you can cast any object to string].

You can echo specific properties of the object:

foreach[$request as $i => $i_value] {
    echo $i_value->name;
}

Of course you could also use var_dump again to dump each object. print_r should work too.

Objects can only be casted to string like you do if they implement the __toString[] magic method, but the objects created by json_decode are just simple StdClass objects that do not implement this. It's probably not your intention to do this at all, but if you're curious, you may have a look at json_decode to custom class to see how you may use a custom class instead of StdClass.

answered Jul 31, 2015 at 19:12

GolezTrolGolezTrol

113k17 gold badges181 silver badges202 bronze badges

I had the same problem recently. I used a for loop to loop through the array which gave me an error of undefined offset. Using isset[] solved the error of undefined offset. I know its too late to answer this question but here it is for someone who might be looking for it in future

$postData = file_get_contents["php://input"];
$request = json_decode[$postData];
// or you can do $postData = json_decode[file_get_contents["php://input"]];
$arrayOfUsers = $request->data; // I used a key of data while sending the array via fetch API

for[$x = 0; $x < count[$arrayOfUsers]; $x++]
{
    if[isset[$arrayOfUsers[$x]]]
    {
        $name = $arrayOfUsers[$x]->name;
        $email = $arrayOfUsers[$x]->email;
        $phone = $arrayOfUsers[$x]->phone;
        $street = $arrayOfUSers[$x]->street;
        // .... and so on
       // then you can do whatever you want with the data
    } else {
      echo "No Data Found";
    }
}

answered Jul 11, 2021 at 8:27

[PHP 4, PHP 5, PHP 7, PHP 8]

The foreach construct provides an easy way to iterate over arrays. foreach works only on arrays and objects, and will issue an error when you try to use it on a variable with a different data type or an uninitialized variable. There are two syntaxes:

foreach [iterable_expression as $value]
    statement
foreach [iterable_expression as $key => $value]
    statement

The first form traverses the iterable given by iterable_expression. On each iteration, the value of the current element is assigned to $value.

The second form will additionally assign the current element's key to the $key variable on each iteration.

Note that foreach does not modify the internal array pointer, which is used by functions such as current[] and key[].

It is possible to customize object iteration.

In order to be able to directly modify array elements within the loop precede $value with &. In that case the value will be assigned by reference.

Warning

Reference of a $value and the last array element remain even after the foreach loop. It is recommended to destroy it by unset[]. Otherwise you will experience the following behavior:

It is possible to iterate a constant array's value by reference:

Note:

foreach does not support the ability to suppress error messages using @.

Some more examples to demonstrate usage:

Unpacking nested arrays with list[]

[PHP 5 >= 5.5.0, PHP 7, PHP 8]

It is possible to iterate over an array of arrays and unpack the nested array into loop variables by providing a list[] as the value.

For example:

The above example will output:

You can provide fewer elements in the list[] than there are in the nested array, in which case the leftover array values will be ignored:

The above example will output:

A notice will be generated if there aren't enough array elements to fill the list[]:

The above example will output:

Notice: Undefined offset: 2 in example.php on line 7
A: 1; B: 2; C: 

Notice: Undefined offset: 2 in example.php on line 7
A: 3; B: 4; C: 

Sanusi Hassan

6 days ago

destructure array elements

you can unpac nested array elements using the following

Okafor Chiagozie

2 days ago

An easier way to unpack nested array elements

$array = [
    [1, 2],
    [3, 4],
];

foreach [$array as [$a, $b]] {
    echo "A: $a; B: $b\n";
}

How do you loop through a multidimensional array in PHP?

Looping through multidimensional arrays Just as with regular, single-dimensional arrays, you can use foreach to loop through multidimensional arrays. To do this, you need to create nested foreach loops — that is, one loop inside another: The outer loop reads each element in the top-level array.

What is array iterator in PHP?

The ArrayIterator class ¶ This iterator allows to unset and modify values and keys while iterating over Arrays and Objects.

What is foreach in PHP?

PHP foreach loop is utilized for looping through the values of an array. It loops over the array, and each value for the fresh array element is assigned to value, and the array pointer is progressed by one to go the following element in the array.

How can we store value in array using for loop in PHP?

Declare the $items array outside the loop and use $items[] to add items to the array: $items = array[]; foreach[$group_membership as $username] { $items[] = $username; } print_r[$items]; Hope it helps!!

Chủ Đề