I am using the following code to get data from a website using Soap.
$client = new SoapClient('http://some.url.here');
class SMSParam {
public $CellNumber;
public $AccountKey;
public $MessageCount;
public $MessageBody;
public $Reference;
}
$parameters = new SMSParam;
$parameters -> AccountKey = "$sms_key";
$parameters -> MessageCount = "25";
$Result = $client->GetIncomingMessages($parameters);
echo "<pre>";
print_r($Result);
echo "</pre>";
Here is a sample of the output:
stdClass Object
(
[GetIncomingMessagesResult] => stdClass Object
(
[SMSIncomingMessage] => Array
(
[0] => stdClass Object
(
[OutgoingMessageID] => data
[Reference] => data
[MessageNumber] => data
[PhoneNumber] => data
[Message] => data
[ReceivedDate] => data
)
[1] => stdClass Object
(
[OutgoingMessageID] => data
[Reference] => data
[MessageNumber] => data
[PhoneNumber] => data
[Message] => data
[ReceivedDate] => data
)
[2] => stdClass Object
(
[OutgoingMessageID] => data
[Reference] => data
[MessageNumber] => data
[PhoneNumber] => data
[Message] => data
[ReceivedDate] => data
)
)
)
)
If only 1 result is returned, I can simply do something like this:
$reference = $result->GetIncomingMessagesResult->SMSIncomingMessage->Reference;
So how would I go about working with multiple results?
Any help would be greatly appreciated.
Iterate over the array?! :-)
It is an array, so you can loop over it easily using
foreach
:However it is worth noting that PHP's
SoapClient
by default appears to return arrays as a PHP array only when there is more than one value in the array - if there is only one value you will just get that value (not contained within an array). An easy way around this is to use the optionSOAP_SINGLE_ELEMENT_ARRAYS
in theSoapClient
constructor; this will prevent this behaviour and ensure you always get arrays.My take on it is to just always make sure you have an array of messages, even if it's an array of 1. That way you don't duplicate any processing.
you need to specify your SMSIncomingMessage arrays object key.
or