Sharing my experience cuz i believe it is most important for you if you decide to use this Soap Client implementation.
At php 7.0.8 the stdClass generated by SoapClient from the response does not use "minOccurs" and "maxOccurs" WSDL modifiers to distinct properties in stdClass-es (aka keys in "associative arrays") and elements in arrays ("aka indexed arrays").
Instead, the implementation decides whether tag is _a key in associative array_ or _one of elements with same tag in indexed array_ by simply the fact whether there is just one element with such tag in the sequence or many.
Consider alive example from my case:
<?php
response xml:
...
<ValidatingCarrier>
<Alternate>AA</Alternate>
</ValidatingCarrier>
...
<ValidatingCarrier>
<Alternate>AA</Alternate>
<Alternate>AY</Alternate>
</ValidatingCarrier>
...
response structure generated by SoapClient:
...
[ValidatingCarrier] => stdClass Object(
[Alternate] => AA // here it is a string
)
...
[ValidatingCarrier] => stdClass Object (
[Alternate] => Array ( // and here this is an array
[0] => AA
[1] => AY
)
)
...
field XSD definition:
<xs:element name="Alternate" type="CarrierCode" minOccurs="0" maxOccurs="24">
?>
You see, the definition in XSD tells us this tag can be repeated up to 24 times, what means it would be an indexed array, but SoapClient does not take that into account and treats the first <Alternate> in example as a value instead of array containing this value.
Undoubtedly, a value should be a property in the stdClass (a key in associative array) _only_ when maxOccurs is 1 or less or not specified (default is 1, see https://www.w3.org/TR/xmlschema-0/#OccurrenceConstraints). Hope this info will be useful for you when you will be implementing your own, correctly working, SoapClient.