I have std object returned via SOAP Client and am trying to read out all the Names / Symbols.
Code I am using is below, but I keep getting invalid argument in foreach on the second foreach statement.
Any ideas?
object(stdClass)#3 (1) {
["ListMoney"]=> object(stdClass)#4 (3) {
["Outcome"]=> string(7) "Success"
["Exchange"]=> object(stdClass)#5 (1) {
["Market"]=> string(9) "CHICMERCX"
}
["Money"]=> object(stdClass)#6 (1) {
["Currency"]=> object(stdClass)#7 (2) {
["Symbol"]=> string(1) "$"
["Name"]=> string(3) "USD"
}
["Currency"]=> object(stdClass)#7 (2) {
["Symbol"]=> string(1) "#"
["Name"]=> string(3) "CND"
}
}
}
Using This Code:
foreach ($result->ListMoney as $ListMoney) { foreach ($ListMoney->Money as $Money) { foreach ($Money->Currency as $Currency) { echo $Currency->Symbol; } } }
You have a few foreach
loops too many, $ListMoney->Money
for example already gives you the currency
:
foreach ($result->ListMoney as $ListMoney) {
foreach ($ListMoney->Money as $Money) {
foreach ($Money->Currency as $Currency) {
echo $Currency->Symbol;
}
}
}
Should be something like:
foreach ($result->ListMoney->Money as $Currency) {
echo $Currency->Symbol;
}
If you use more inner loops, you will run into invalid arguments because for example $result->ListMoney->Outcome->Money
does not exist.
Note that by using a syntax like foreach ($result->ListMoney as ...
you are skipping a level in your nested object and going straight to the second level. That applies to all your foreach
loops.