2016-07-02 3 views
0

Ich versuche, die Ergebnisse nach Zimmerpreis einer Seifen Antwort zu sortieren:PHP: SOAP-Antwort Ergebnisse sortieren

stdClass Object ( 
    [GetHotelsResult] => stdClass Object ( 
     [SEARCH_RESPONSE] => Array ( 
      [0] => stdClass Object ( 
       [HOTELNAME] => Hotel1 
       [ROOMNAME] => Room2 
       [ROOMPRICE] => 144.50 
      ) 
      [1] => stdClass Object ( 
       [HOTELNAME] => Hotel1 
       [ROOMNAME] => Room1 
       [ROOMPRICE] => 231.10 
      ) 
      [2] => stdClass Object ( 
       [HOTELNAME] => Hotel1 
       [ROOMNAME] => Room3 
       [ROOMPRICE] => 94.00 
      ) 
     ) 
    ) 
); 

ich viele Lösungen gemacht haben, aber sie hat nicht funktioniert ...

MEIN iST-CODE:

$sClient = new SoapClient($wsdl, array('trace' => 1)); 
$response = $sClient->GetHotels($data);  
$ghdata = $sClient->__getLastResponse(); 
$doc = new DOMDocument(); 
$doc->loadXML($ghdata); 
$x = $doc->documentElement; 
$rooms = $x->getElementsByTagName("SEARCH_RESPONSE"); 
    foreach($rooms as $SEARCH_RESPONSE) 
{ // show results 
+0

Es scheint, wie es ein Fehler ist oder in Ihrer Antwort Typo: 'SEARCH_RESPONSE' Array kann nicht sein, Es gibt Datensätze mit jeweils "0". –

Antwort

0

$response Angenommen, Ihre äußere stdClass Objekt ist, ich denke, Sie bekommen und Fehler wie folgt aus:

Warning: usort() expects parameter 1 to be array, object given in ... 

Dies ist, weil usort mit Array und nicht Objekte arbeitet. Was Sie eigentlich sortieren möchten, ist ein SEARCH_RESPONSE Array. Auch darauf achten, dass Elemente in diesem Array sind stdClass Objekte selbst, so haben Sie $a->{$key} Notation zu verwenden, statt []:

function build_sorter($key) { 
    return function ($a, $b) use ($key) { 
     // pay attention to `{$key}` notation 
     return strnatcmp($a->{$key}, $b->{$key}); 
    }; 
} 

// Get array to sort 
usort($response->GetHotelsResult->SEARCH_RESPONSE, build_sorter('ROOMPRICE')); 

foreach ($response->GetHotelsResult->SEARCH_RESPONSE as $item) { 
    echo $item->ROOMNAME . ', ' . $item->ROOMPRICE . "\n"; 
} 
+0

Schön! Es funktionierte separat, aber ich versuche meinen Code einzubauen. Ich kann nicht herausfinden, wie. (Frage aktualisiert, um ein Beispiel meines tatsächlichen Codes zu setzen) – Arrow