J'utilise le code suivant pour obtenir des données d'un site Web utilisant 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>";
Voici un échantillon de la sortie:
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
)
)
)
)
Si seulement 1 résultat est retourné, je peux simplement faire quelque chose comme ceci:
$reference = $result->GetIncomingMessagesResult->SMSIncomingMessage->Reference;
Alors, comment pourrais-je travailler avec plusieurs résultats?
Toute aide serait grandement appréciée.
C'est un tableau, vous pouvez donc le parcourir facilement en utilisant foreach
:
foreach ($result->GetIncomingMessagesResult->SMSIncomingMessage as $message) {
echo $message->Reference;
}
Cependant, il convient de noter que SoapClient
de PHP par défaut semble renvoyer les tableaux sous la forme d'un tableau PHP uniquement lorsqu'il y a plus d'une valeur dans le tableau - s'il n'y a qu'une seule valeur vous obtiendrez juste cette valeur (non contenue dans un tableau). Un moyen simple de contourner cela est d'utiliser l'option SOAP_SINGLE_ELEMENT_ARRAYS
dans le constructeur SoapClient
; cela empêchera ce comportement et garantira que vous obtenez toujours des tableaux.
Mon point de vue est de toujours vous assurer d'avoir un tableau de messages, même s'il s'agit d'un tableau de 1. De cette façon, vous ne dupliquez aucun traitement.
$smsMessages = is_array( $result->GetIncomingMessagesResult->SMSIncomingMessage )
? $result->GetIncomingMessagesResult->SMSIncomingMessage
: array( $result->GetIncomingMessagesResult->SMSIncomingMessage );
foreach ( $smsMessages as $smsMessage )
{
echo $smsMessage->Reference;
}
vous devez spécifier la clé d'objet de vos tableaux SMSIncomingMessage.
$result->GetIncomingMessagesResult->SMSIncomingMessage[0]->Reference;
ou
foreach ($result->GetIncomingMessagesResult->SMSIncomingMessage as $message)
{
$reference = $message[0]->Reference;
//...
}
Itérer sur le tableau?! :-)
foreach ($result->GetIncomingMessagesResult->SMSIncomingMessage as $message)
{
$reference = $message->Reference;
//...
}
Cast objet pour convertir le tableau
$array = (array) json_decode(['TEST'=>true]);