16

次のコードを使用して、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;

では、複数の結果を処理するにはどうすればよいでしょうか。

どんな助けでも大歓迎です。

4

5 に答える 5

41

これは配列なので、次を使用して簡単にループできますforeach

foreach ($result->GetIncomingMessagesResult->SMSIncomingMessage as $message) {
    echo $message->Reference;
}

SoapClientただし、配列に複数の値がある場合にのみ、PHP がデフォルトで配列を PHP 配列として返すように見えることに注意してください。SOAP_SINGLE_ELEMENT_ARRAYSこれを回避する簡単な方法は、SoapClientコンストラクターでオプションを使用することです。これにより、この動作が防止され、常に配列を取得できるようになります。

于 2009-06-04T14:18:29.413 に答える
3

私の考えでは、メッセージの配列が1の配列であっても、常にメッセージの配列があることを確認してください。そうすれば、処理が重複することはありません。

$smsMessages = is_array( $result->GetIncomingMessagesResult->SMSIncomingMessage )
    ? $result->GetIncomingMessagesResult->SMSIncomingMessage
    : array( $result->GetIncomingMessagesResult->SMSIncomingMessage );

foreach ( $smsMessages as $smsMessage )
{
    echo $smsMessage->Reference;
}
于 2009-06-04T14:22:15.613 に答える
2

SMSIncomingMessage 配列のオブジェクト キーを指定する必要があります。

$result->GetIncomingMessagesResult->SMSIncomingMessage[0]->Reference;

また

foreach ($result->GetIncomingMessagesResult->SMSIncomingMessage as $message)
{
$reference = $message[0]->Reference;
//...
}
于 2010-07-02T10:09:28.903 に答える
0

アレイを反復処理しますか?!:-)

foreach ($result->GetIncomingMessagesResult->SMSIncomingMessage as $message)
{
    $reference = $message->Reference;
    //...
}
于 2009-06-04T14:19:17.057 に答える