форматирование сложного массива PHP, возвращаемого вызовом SOAP - PullRequest
0 голосов
/ 18 марта 2011

В настоящее время я работаю с web-производством, использующим nusoap для создания вызовов моих методов, моя проблема в том, что возвращается массив, и как его отформатировать способом, который пригоден для использования, другие проекты, над которыми я работал, возвращают намного прощеструктурированный XML-файл, где я мог бы использовать $ xml = simplexml_load_string ($ xmlfile);чтобы построить и отсортировать мои массивы,

это вызов nusoap

$PickUpDateTime='2011-03-17T09:00:00';
$ReturnDateTime='2011-03-21T09:00:00';
require_once('nusoap/lib/nusoap.php');
$wsdl="Srvc.asmx?WSDL";
$client = new nusoap_client($wsdl, 'wsdl'); 
$param = array('OTA_VehAvailRateRQ' => 
        array('VehAvailRQCore' => 
           array('VehRentalCore' => 
            array('PickUpDateTime'=>$PickUpDateTime,
                'ReturnDateTime'=>$ReturnDateTime,
                'PickUpLocation' => array('LocationCode' =>$location),
                'ReturnLocation' => array('LocationCode' =>$location)
            )//PickUpDateTime, ReturnDateTime, PickUpLocation, ReturnLocation
               )//VehRentalCore
        )//VehAvailRQCore
        ); //OTA_VehAvailRateRQ

// LOAD OUR VARIABLE WITH THE RETURN ARRAY
$res = $client->call('GetVehAvailRate', $param);

, на данный момент я бы использовал simplexml_load_string ();но, похоже, это не работает с этим вызовом, выполняя дамп $ res производит .. (Многие данные отсутствуют из-за лимита отправки ... но как только массив попадает в Автомобиль, там больше нет массивов ..).

    Array
(
    [Success] => 
    [VehAvailRSCore] => Array
        (
            [VehRentalCore] => Array
                (
                    [PickUpLocation] => Array
                        (
                            [!LocationCode] => LOCATIONNAME
                        )

                    [ReturnLocation] => Array
                        (
                            [!LocationCode] => LOCATIONNAME
                        )

                    [!PickUpDateTime] => 2011-03-23T09:00:00
                    [!ReturnDateTime] => 2011-03-31T09:00:00
                )

            [VehVendorAvails] => Array
                (
                    [VehVendorAvail] => Array
                        (
                            [Vendor] => Array
                                (
                                    [!Code] => AD
                                )

                            [VehAvails] => Array
                                (
                                    [VehAvail] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [VehAvailCore] => Array
                                                        (
                                                            [Vehicle] => Array ()
                                                        )

                                                )

                                            [1] => Array
                                                (
                                                    [VehAvailCore] => Array
                                                        (
                                                            [Vehicle] => Array ()
                                                        )
                                                )

                                            [2] => Array
                                                (
                                                    [VehAvailCore] => Array
                                                        (
                                                            [Vehicle] => Array()
                                                        )
                                                )

                                            [3] => Array
                                                (
                                                    [VehAvailCore] => Array
                                                        (
                                                            [Vehicle] => Array()

                                                        )
                                        )

                                )

                            [Info] => Array
                                (
                                    [LocationDetails] => 
                                )

                        )

                )

        )

    [!EchoToken] => xxxxxxxx
    [!TimeStamp] => 2011-03-18T11:35:19.165125-04:00
    [!Target] => xxxxx
    [!Version] => xxxxxx
    [!TransactionIdentifier] => xxx
)

При попытке циклически проходить через несколько массивов с помощью цикла foreach оказывается немного сложнее, чем предполагалось ...

теперь, когда я пытаюсь получить доступ к каждому элементу с помощью foreachцикл, мне нужно использовать буквальные вызовы, то есть: $ res ['VehAvailRSCore'], а также те восклицательные знаки, с которыми я раньше не сталкивался ни: т.е.! LocationCode, обычно это просто $ res-> LocationCode

Итак, мой вопрос заключается в следующем ... как я могу использовать этот массив в своих интересах? Просто чтобы я мог вызывать каждый элемент массива и, возможно, добавлять эти / эти значения в другой массив, чтобы я мог лучше форматировать свою страницу?

спасибо

Ответы [ 2 ]

1 голос
/ 18 марта 2011

Просто хотел опубликовать, какой код сработал для меня ... Я изменил вызов класса nusoap и заменил его на PHP SoapClass

$wsdl="..Srvc.asmx?WSDL";
$client = new SoapClient($wsdl); 
$param = array('OTA_VehAvailRateRQ' => 
           array('VehAvailRQCore' =>
             array('VehRentalCore' => 
               array('PickUpDateTime'=>$PickUpDateTime,
                     'ReturnDateTime'=>$ReturnDateTime,
                     'PickUpLocation' => array('LocationCode' =>$location),
                     'ReturnLocation' => array('LocationCode' =>$location)
                    )
             )//VehRentalCore
           )//VehAvailRQCore
         ); //OTA_VehAvailRateRQ
$res = $client->__soapCall('GetVehAvailRate', $param);

Возвращение теперь Object, которыйне будет отображать эти ужасные восклицательные знаки, чтобы получить доступ к каждому значению, я использовал не буквальный способ,

<code>foreach($res->subkey->subsubkey->subsubsubkey->subsubsubsubkey as $result) {
   echo "<div style='padding:10px; border:1px solid #ccc;'>";
   foreach($result as $value){
      $string = $value->subkey->subsubkey->subsubsubkey;
      echo "<pre>";
      print_r($value);
      echo "
";} echo"";}

Надеюсь, кто-то еще может получитьиспользовать от него .. Спасибо за вашу помощь:)

1 голос
/ 18 марта 2011

Чувак, nusoap мертв. Не используйте его. Вместо этого используйте встроенный в SOAP класс PHP.

Доступ к значениям массива осуществляется с помощью

$a['key1']['subkey']['subsubkey']['subsubkey']
  • PHP сам по себе ничего не дает.
...