Приветствую,
Я не могу найти способ создать запрос функции с массивом в качестве аргумента. Например, как мне сделать такой запрос с помощью PHP SoapClient:
<GetResultList> <GetResultListRequest> <Filters> <Filter> <Name>string</Name> <Value>string</Value> </Filter> <Filter> <Name>string</Name> <Value>string</Value> </Filter> </Filters> </GetResultListRequest> </GetResultList>
Можно ли вызвать эту функцию без создания каких-либо дополнительных классов (только с использованием массивов)? Если нет, то какой самый компактный способ назвать это?
Вы можете использовать эту -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);
Например, вы можете попробовать следующее:
$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") ));