May be its too late, but I hope this help.
I had the same problem, gSoap send 3 elements array but php only got the last one.
To solve this you have to create an auxiliar class, in this case CAuxTR.
class CAuxTR
{
int sizeTR = 0; // Cantidad de Roles
CRol **ptrTR = NULL; // Lista de Roles
};
class CResp
{
public:
_string data = "";
int sizeTR = 0;
CRol **ptrTR = NULL;
CAuxTR phpTR; // para que el arreglo TR se vea desde PHP
};
In C++ just asign the same values to elements en phpTR.
CResp Resp;
// ... code
Resp.phpTR.sizeTR = Resp.sizeTR;
Resp.phpTR.ptrTR = Resp.ptrTR ;
In PHP use this new element
$SResp = $cliente->__soapCall(... )
$tr = $Resp['phpTR']->TR; // here is your array
may be yo could add this lines after
if( sizeof($tr) == 1 )
$tr = array( $tr );
Regards
pam