Я не уверен, каково точное решение с Zend_SOAP_Server, но я думаю, что вы хотите использовать тип HashMap, а не Array, который намного ближе к тому, что PHP подразумевает под «массивом» (я пришелпри похожих проблемах с NuSOAP: либо ключи массива отбрасываются, либо они используются в качестве имен элементов, оба из которых являются недопустимыми представлениями типа PHP «массив»)
Вы хотите получить такое представление:
<hash xmlns:ns2="http://xml.apache.org/xml-soap" xsi:type="ns2:Map">
<item>
<key xsi:type="xsd:string">firstname</key>
<value xsi:type="xsd:string">John</value>
</item>
<item>
<key xsi:type="xsd:string">lastname</key>
<value xsi:type="xsd:string">Doe</value>
</item>
</hash>
Большинство серверов SOAP, похоже, декодируют это нормально, даже если их клиентская реализация не использует его по умолчанию.
Либо это, либо вам нужно определить собственную схему документа далеекак это:
<userStruct xsi:type="myNamespace:userStruct">
<firstname xsi:type="xsd:string">John</value></firstname>
<lastname>Doe</lastname>
</userStruct>
Лично я склонен считать, что SOAP создает больше проблем, чем решает, но YMMV.:)