4

PHP 5.3.1を使用してWebサービスを呼び出すと、リクエストは次のようになります。

<?php

$client = new SoapClient('the API wsdl'); 
$param = array(
    'LicenseKey' => 'a guid'
  ); 


$result = $client->GetUnreadIncomingMessages($param);

echo "<pre>";
print_r($result);
echo "</pre>";

?>

これが私が返す応答です:

stdClass Object
(
[GetUnreadIncomingMessagesResult] => stdClass Object
    (
        [SMSIncomingMessage] => Array
            (
                [0] => stdClass Object
                    (
                        [FromPhoneNumber] => the number
                        [IncomingMessageID] => message ID
                        [MatchedMessageID] => 
                        [Message] => Hello there
                        [ResponseReceiveDate] => 2012-09-20T20:42:14.38
                        [ToPhoneNumber] => another number
                    )

                [1] => stdClass Object
                    (
                        [FromPhoneNumber] => the number
                        [IncomingMessageID] => 
                        [MatchedMessageID] => 
                        [Message] => hello again
                        [ResponseReceiveDate] => 2012-09-20T20:42:20.69
                        [ToPhoneNumber] => another number
                    )

            )

    )

)
4

1 に答える 1

5

取得するデータにアクセスするには、ネストされた複数のオブジェクトをナビゲートする必要があります。オブジェクトはstdClassタイプです。stdClass内のネストされたオブジェクトにアクセスできることは私の理解ですが、インデックス作成を容易にするためにそれらを配列にキャストします。

したがって、次のように開始します。

<?php     

$client = new SoapClient('the API wsdl');      
$param = array('LicenseKey' => 'a guid');      
$result = $client->GetUnreadIncomingMessages($param);  

これで、stdClassタイプの$resultvavialbleができました。これには、「GetUnreadIncomingMessagesResult」と呼ばれるstdClassタイプの単一のオブジェクトが含まれています。このオブジェクトには、「SMSIncomingMessage」という配列が含まれています。その配列には、必要なデータを保持するstdClassの可変数のオブジェクトが含まれています。

したがって、次のことを行います。

$outterArray = ((array)$result);
$innerArray = ((array)$outterArray['GetUnreadIncomingMessagesResult']);
$dataArray = ((array)$innerArray['SMSIncomingMessage']);

これで、データを抽出する各オブジェクトを保持する配列ができました。したがって、この配列をループして保持オブジェクトを取得し、保持オブジェクトを配列にキャストしてから、必要な情報を抽出します。これは次のように行います。

foreach($dataArray as $holdingObject)
                {
                $holdingArray = ((array)$holdingObject);
                $phoneNum = $holdingArray['FromPhoneNumber'];
                $message = $holdingArray['Message'];

                echo"<div>$fphone</div>
                     <div>$message</div>";

                }                   
?>

これにより、探している出力が得られるはずです。あなたが探している特定の情報を引き出すために、holdingArrayにインデックスを付ける場所を調整することができます。

完全なコードは次のようになります。

<?php     

    $client = new SoapClient('the API wsdl');      
    $param = array('LicenseKey' => 'a guid');      
    $result = $client->GetUnreadIncomingMessages($param); 
    $outterArray = ((array)$result);
    $innerArray = ((array)$outterArray['GetUnreadIncomingMessagesResult']);
    $dataArray = ((array)$innerArray['SMSIncomingMessage']);
    foreach($dataArray as $holdingObject)
    {
         $holdingArray = ((array)$holdingObject);
         $phoneNum = $holdingArray['FromPhoneNumber'];
         $message = $holdingArray['Message'];

         echo"<div>$fphone</div>
              <div>$message</div>";
    }
?>
于 2012-09-21T15:10:05.110 に答える