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";
}