2016-07-02 2 views
0

내가 비누 반응 ROOMPRICE하여 결과를 정렬하는 데 노력하고있어 결과 : ... 나는 많은 솔루션을했습니다PHP : SOAP 응답은 일종의

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

을하지만, 작동하지 않았다

내 실제 코드 :

$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

것 같다 :'SEARCH_RESPONSE'배열을 가질 수 없습니다 각각 '0'색인을 가진 레코드가 있습니다. –

답변

0

$response 가정이 외부 stdClass 객체를, 당신이 점점 오류가 그런 것 같아요

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

usort은 개체가 아닌 배열에서 작동하기 때문입니다. 실제로 정렬하려는 것은 SEARCH_RESPONSE 배열입니다. 또한,이 배열의 요소가 stdClass 개체 자체입니다주의, 그래서 당신은 $a->{$key} 표기 대신 []을 사용해야합니다 : 거기에 오류가있다거나 응답 오타 같은

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

니스! 그것은 seperatly,하지만 내 코드를 넣으려고 노력했다. 방법을 알아낼 수 없습니다. (내 실제 코드의 샘플을 넣기 위해 업데이트 된 질문) – Arrow