2013-09-27 2 views
3

Я использую Zend_Soap_Client и встречая этот вопрос:Single элемент массива становится объект с Zend_Soap_Client

<parent> 
    <child><name>abc</name></child> 
    <child><name>def</name></child> 
</parent> 

Если есть больше чем один дочерний элемент, то Zend возвращение массива и я могу достигнуть как

$result->parent->child[0]->name

, но если есть только один дочерний узел, он возвращает объект:

$result->parent->child->name

Не могли бы вы сообщить мне, что случилось с моим подходом или как я могу его преодолеть?

Мой пример кода:

$client = new Zend_Soap_Client('url', array('wsdl'=>'url)); 
$result = $client->getResult(); 

Я использую Zend 1.9. Такая же проблема возникает с родным языком PHP SoapClient

Спасибо!

+2

если (is_object ($ result-> родительский,> ребенок)) .... возможно с, что вы можете сделать что-то и привести результат в массив – Hackerman

+0

is_array) должно быть (поскольку is_object() будет истинным в обоих случаях. Массив также является объектом. Прямо сейчас я использую это, но, поскольку есть несколько таких элементов, я не лучший путь. Благодаря! –

+0

У вас есть два случая: 1) $ result-> parent-> child - это массив, 2) - это объект ... если если не массив, то используйте aux var и введите $ result-> parent-> child в массив ... я думаю, что это хороший aproach – Hackerman

ответ

6

Лично я не вижу необходимости использовать Zend_Soap_Client вместо SoapClient, так как версия Zend ничего полезного не добавлять, но с другой стороны, решение относится к обеим:

Существует параметр опции массива в оригинальный SoapClient, который принимает много вещей, и особенно это ниже (ref):

в особенности варианта является битовой маской SOAP_SINGLE_ELEMENT_ARRAYS ...

С помощью этой опции все структуры массива в ответе мыла не сводятся к одному элементу, если они содержат только один, но слева как есть. Вы всегда получаете доступ к массиву, который проще, чем переключение в зависимости от содержимого.

Пример:

$s = new SoapClient($wsdl, array('features' => SOAP_SINGLE_ELEMENT_ARRAYS)); 
+0

Спасибо! Даже с SoapClient я получаю такой же результат, но SOAP_SINGLE_ELEMENT_ARRAYS кажется надеждой. Позвольте мне попробовать ... –

Смежные вопросы