2009-02-23 12 views
9

Saluti,Passando array per la funzione SOAP in PHP

io non riesco a trovare un modo per creare una richiesta di funzione con array come un argomento. Per esempio, come faccio a fare questo tipo di richiesta utilizzando PHP SoapClient:

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

Questo è possibile chiamare questa funzione senza creare lezioni extra (utilizzando solo gli array)? Se no, qual è il modo più compatto di chiamarlo?

risposta

6

È possibile utilizzare questa funzione -v per convertire un array a un albero di oggetti:

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; 
} 

Come così:

$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

Grazie mille. Funziona perfettamente! Non sono riuscito a trovare la parte "Filter" => array ". – bezmax

-1

Ad esempio, si può provare questo:

$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

Questo non risponde alla domanda. – Tom