2009-02-23 12 views
9

Saludos,matriz para la función de SOAP que pasan en PHP

Me parece que no puede encontrar una manera de crear una solicitud de función con matriz como un argumento. Por ejemplo, ¿cómo puedo hacer este tipo de solicitud utilizando PHP SoapClient:

<GetResultList> 
    <GetResultListRequest> 
    <Filters> 
     <Filter> 
     <Name>string</Name> 
     <Value>string</Value> 
     </Filter> 
     <Filter> 
     <Name>string</Name> 
     <Value>string</Value> 
     </Filter> 
    </Filters> 
    </GetResultListRequest> 
</GetResultList> 

Es esto posible llamar a esta función sin crear clases adicionales (usando sólo arrays)? Si no, ¿cuál es la forma más compacta de llamarlo?

Respuesta

6

Puede utilizar esta función -v para convertir una matriz a un árbol de objetos:

function array_to_objecttree($array) { 
    if (is_numeric(key($array))) { // Because Filters->Filter should be an array 
    foreach ($array as $key => $value) { 
     $array[$key] = array_to_objecttree($value); 
    } 
    return $array; 
    } 
    $Object = new stdClass; 
    foreach ($array as $key => $value) { 
    if (is_array($value)) { 
     $Object->$key = array_to_objecttree($value); 
    } else { 
     $Object->$key = $value; 
    } 
    } 
    return $Object; 
} 

así:

$data = array(
    'GetResultListRequest' => array(
    'Filters' => array(
     'Filter' => array(
     array('Name' => 'string', 'Value' => 'string'), // Has a numeric key 
     array('Name' => 'string', 'Value' => 'string'), 
    ) 
    ) 
) 
); 
$Request = array_to_objecttree($data); 
+1

Muchas gracias. ¡Funciona a la perfección! Realmente no pude averiguar la parte "'Filtro' => matriz". – bezmax

-1

Por ejemplo, puede intentar esto:

$data1 = new SampleStruct(); 
$data1->title="Hello world"; 
$data1->description="This is a sample description."; 

$data2 = new SampleStruct(); 
$data2->title="Hello world 2"; 
$data2->description="This is a sample description 2."; 

$client->__soapCall("sampleFunction", array(
    new SoapParam(new SoapVar(array($data1, $data2) , SOAP_ENC_ARRAY, 
     "SampleStruct_Array", "http://www.w3.org/2001/XMLSchema"), 
     "theSampleFunctionParamName") 
)); 
+0

Esto no responde la pregunta. – Tom

Cuestiones relacionadas