Friday, April 8, 2011

Passing array to SOAP function in PHP

Greetings,

I can't seem to find a way to create a function request with array as an argument. For example, how do I make this kind of request using PHP SoapClient:

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

Is this possible to call this function without creating any extra classes (using arrays only)? If no, what is the most compact way of calling it?

From stackoverflow
  • You can use this -v function to convert a array to a object tree:

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

    Like so:

    $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);
    
    Max : Thanks a lot. It works flawlessly! I could not actually find out the "'Filter' => array" part.

0 comments:

Post a Comment