[英]PHP: SOAP response sort results
I'm trying to sort the results by ROOMPRICE of a soap response : 我正在尝试通过ROOMPRICE对肥皂回复的结果进行排序:
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
)
)
)
);
I've made many solutions, but they didn't work... 我已经提出了许多解决方案,但是它们没有用...
MY ACTUAL 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
Assuming $response
is your outer stdClass
object, I guess you're getting and error like that: 假设
$response
是您的外部stdClass
对象,我想您会得到这样的错误:
Warning: usort() expects parameter 1 to be array, object given in ...
This is because usort
works with array and not objects. 这是因为
usort
适用于数组,而不适用于对象。 What you actually want to sort is a SEARCH_RESPONSE
array. 您实际要排序的是
SEARCH_RESPONSE
数组。 Also, pay attention that elements in this array are stdClass
objects themselves, so you have to use $a->{$key}
notation instead of []
: 另外,请注意,此数组中的元素本身就是
stdClass
对象,因此您必须使用$a->{$key}
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";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.