Soapを使用してWebサイトからデータを取得するために次のコードを使用しています。
$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>";
次に出力のサンプルを示します。
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
)
)
)
)
結果が1つしか返されない場合は、次のようにするだけです。
$reference = $result->GetIncomingMessagesResult->SMSIncomingMessage->Reference;
では、複数の結果を処理するにはどうすればよいでしょうか?
どんな助けでも大歓迎です。
これは配列なので、foreach
を使用して簡単にループできます。
foreach ($result->GetIncomingMessagesResult->SMSIncomingMessage as $message) {
echo $message->Reference;
}
ただし、PHPのSoapClient
は、デフォルトでPHP配列が配列に複数の値がある場合にのみ配列を返すように見えます-値が1つしかない場合(配列内に含まれていない)その値を取得するだけです。これを回避する簡単な方法は、SoapClient
コンストラクターでオプションSOAP_SINGLE_ELEMENT_ARRAYS
を使用することです。これにより、この動作が防止され、常に配列を取得できます。
私の見解では、1の配列であっても、常にメッセージの配列があることを確認することです。これにより、処理を複製しません。
$smsMessages = is_array( $result->GetIncomingMessagesResult->SMSIncomingMessage )
? $result->GetIncomingMessagesResult->SMSIncomingMessage
: array( $result->GetIncomingMessagesResult->SMSIncomingMessage );
foreach ( $smsMessages as $smsMessage )
{
echo $smsMessage->Reference;
}
sMSIncomingMessage配列オブジェクトキーを指定する必要があります。
$result->GetIncomingMessagesResult->SMSIncomingMessage[0]->Reference;
または
foreach ($result->GetIncomingMessagesResult->SMSIncomingMessage as $message)
{
$reference = $message[0]->Reference;
//...
}
配列を反復しますか? :-)
foreach ($result->GetIncomingMessagesResult->SMSIncomingMessage as $message)
{
$reference = $message->Reference;
//...
}
オブジェクトをキャストして配列を変換する
$array = (array) json_decode(['TEST'=>true]);