Циклический результат от вызова веб-службы .NET в php - PullRequest
1 голос
/ 16 марта 2012

Я работаю над получением результатов от веб-службы .net с методом, который возвращает общий список.Используя var_dump на странице php (которая вызывает метод .net с использованием WSDL), я смог увидеть, что из веб-службы .net возвращается следующее:

object(stdClass)#4 (1) { 
    ["testClass"]=> array(2) { 
        [0]=> object(stdClass)#5 (2) { 
            ["City"]=> string(7) "Hello_1" 
            ["State"]=> string(8) "World!_1" 
        } 
        [1]=> object(stdClass)#6 (2) { 
            ["City"]=> string(7) "Hello_2" 
            ["State"]=> string(8) "World!_2" 
        } 
    }
} 

Это может быть глупым вопросом, ноЯ застрял в обработке (циклически) этот результат в PHP?Нужно ли создавать класс «testClass» в php?*

$ client = new SoapClient ("http://testURL/MyTestService.asmx?WSDL");

$params->Param1 = 'Hello'; 
$params->Param2 = 'World!';

$result = $client->testAspMethod($params)->testAspMethodResult;

var_dump($result);

Как я могу просмотреть результаты в php?

Ответы [ 2 ]

2 голосов
/ 16 марта 2012

Это будет работать независимо от количества возвращенных товаров.Если вы не выполните проверку массива, как у меня здесь, ваш код даст неожиданные результаты.Если веб-сервис возвращает только один элемент, он не возвращает массив.Вместо этого он фактически поместит объект непосредственно в $result->testClass, например $result->testClass->City, а не $result->testClass[0]->City, как вы могли бы ожидать.

// here we make sure we have an array, even if there's just one item in it
if(is_array($result->testClass))
{
    $result = $result->testClass;
}
else
{
    $result = array($result->testClass);
}

foreach($result as $item)
{
    echo 'City: ' . $item->City . '<br />';
    echo 'State: ' . $item->State . '<br />';
}
1 голос
/ 16 марта 2012

Если вы знаете имя, которое возвращается (в данном случае testClass), вы можете ...

foreach($result->testClass as $key => $obj){
    echo "Key: $key\n";
    echo $obj->City . "\n";
    echo $obj->State . "\n";
}
...