stdClass nesnesi ve foreach döngüleri

4 Cevap php

Sabun kullanarak bir web sitesinden veri almak için aşağıdaki kodu kullanıyorum.

$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>";

Burada çıktı bir örnek:

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
                        )

                )

        )

)

Sadece 1 sonuç döndürdü, ben sadece böyle bir şey yapabilirsiniz:

$reference = $result->GetIncomingMessagesResult->SMSIncomingMessage->Reference;

Peki nasıl birden çok sonuç ile çalışma hakkında gitmek istiyorsunuz?

Herhangi bir yardım büyük mutluluk duyacağız.

4 Cevap

Bu bir dizidir, bu nedenle bunun üzerinde döngü kullanarak kolayca yapabilirsiniz foreach:

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

Tek bir değer varsa, sadece (bu değer değil alırsınız - Ancak PHP'nin SoapClient varsayılan dizide birden fazla değeri yoktur, sadece bir PHP dizi olarak diziler dönmek için görünür fazlalaştı ), bir dizi içinde ihtiva etmiştir. Bu kolay bir yol etrafında SoapClient yapıcısındaki seçeneği SOAP_SINGLE_ELEMENT_ARRAYS kullanmak için; bu davranışı önlemek ve her zaman diziler elde sağlayacaktır.

Bunun almak benim her zamanki emin bunu 1 bir dizi olsa bile, mesajları bir dizi var yapmaktır. Herhangi bir işlem çoğaltmak yok Bu şekilde.

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

foreach ( $smsMessages as $smsMessage )
{
    echo $smsMessage->Reference;
}

Eğer SMSIncomingMessage dizi anahtarı nesne belirtmeniz gerekir.

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

veya

fveyaeach ($result->GetIncomingMessagesResult->SMSIncomingMessage as $message)
{
$reference = $message[0]->Reference;
//...
}

Dizinin üzerinde yineleme?! :-)

foreach ($result->GetIncomingMessagesResult->SMSIncomingMessage as $message)
{
    $reference = $message->Reference;
    //...
}