I believe the WSDL is correct, in that you can provide:
A) a <lines> element, or
B) one/both of <addLines>/<removeLines>
Moving the </xsd:sequence> below the lines element as mentioned above would theoretically permit you to provide all three (lines/addLines/removeLines) which is not intended.
It appears the workaround is to use PHP classes to define the lines/add/remove part of the object, e.g.:
class updatePhone_using_addLines {
public $name;
public $addLines;
}
// Instantiate an object of the custom class
$updatePhoneObj = new updatePhone_using_addLines;
$updatePhoneObj -> name = 'CSFTESTPHONE';
// We can set addLines as an array in the usual SoapClient way
$updatePhoneObj -> addLines = array(
"line" => array(
"index" => "2",
"dirn" => array(
"pattern" => "9876543210",
"routePartitionName" => null
)
)
);
I went ahead and created a sample demonstrating this with <updatePhone> in the project here: https://github.com/ciscodevnet/axl-php-samples