2009-02-23 12 views
9

Pozdrowienia,Przekazywanie tablicy do funkcji SOAP w PHP

Nie mogę znaleźć sposobu na utworzenie żądania funkcji z tablicą jako argumentem. Na przykład, w jaki sposób mogę dokonać tego rodzaju wniosek za pomocą PHP SoapClient:

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

to jest możliwe, aby wywołać tę funkcję bez tworzenia dodatkowych zajęć (używając tylko tablice)? Jeśli nie, jaki jest najbardziej zwarty sposób nazywania go?

Odpowiedz

6

Można użyć tej -v funkcję konwertowania tablicę do drzewa obiektu:

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

tak:

$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

Wielkie dzięki. Działa bez zarzutu! Nie mogłem znaleźć części "Filter" => array. – bezmax

-1

Na przykład, można spróbować to:

$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

To nie odpowiada na pytanie. – Tom