2009-02-23 72 views
9

Greetings,将数组传递给PHP中的SOAP函数

我似乎无法找到一种方法来创建一个函数请求与数组作为参数。 例如,如何让我用PHP SoapClient的这种要求:

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

这是可能调用此函数不会产生任何额外的类(仅使用数组)?如果不是,那么调用它最紧凑的方式是什么?

回答

6

您可以使用此-v函数将数组转换为对象树:

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

像这样:

$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

非常感谢。它完美无瑕!我实际上找不到“'Filter'=> array”部分。 – bezmax 2009-02-24 08:05:47

-1

例如,你可以试试这个:

$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

这不回答问题。 – Tom 2015-11-13 09:52:26