我正在做一个预订网站,它通过PHP中的SOAP请求获取xml结果。然后以PHP对象数组的形式返回结果。然后我使用PHP显示这些结果。在一个请求中,返回了300多个结果。因此,我需要按价格构建一个节目:最终用户的低到高或高到低选项。我对PHP数组对象的经验很少,任何人都可以建议我可以考虑进行这种排序的选项吗?
我在考虑将所有结果存储到数据库表中,然后使用SELECT查询进行排序,但由于每天会有很多搜索,每次搜索至少会产生300个条目,这会使数据库很快变得非常笨重。有没有办法暂时将搜索存储在数据库中?
感谢您抽出宝贵时间阅读本文。如果上述问题对任何人都不清楚,我将很乐意提供进一步的解释。
以下是我的数据示例:
Array (
[0] => stdClass Object (
[Id] => HS
[Code] => CAUMJM
[Status] => InstantConfirmation
[Price] => 87
[Tax] => 0
[SalePrice] => 0
[currency] => USD
[Type] => Guest Only
[guests] => Array (
[0] => stdClass Object (
[Category] => Standard for 1 guest
[number] => Array ( [0] => stdClass Object ( [Type] => A[age] => 30 ) )
[totalRate] => 87
[ratesPerHour] => Array ( [0] => stdClass Object ( [date] => 2014-08-20 [amount] => 87 ) )
)
)
)
)
答案 0 :(得分:0)
答案 1 :(得分:0)
尝试使用usort。 PHP Documentation
提供要排序的php数组和一个匿名函数,它将比较两个数组项,并确定哪个项应该在列表中的第一个。
除非我错了,否则您似乎从第三方服务获取肥皂,在这种情况下,您将无法从数据库查询结果。您可以将usort函数的结果存储在内存存储(如apc或memcached)中,而不是创建自己的本地数据库缓存。然后,每次查询只需运行一次计算量大的usort。这将显着加快排序结果的请求时间。
我提出的缓存建议有点偏离主题,没有必要获得您想要的结果。如果您有兴趣,请留意他们,但我会尝试将您带到您需要的地方。
就你的实施方式而言,尝试这样的事情:
$lowToHigh = function($a, $b) {
return $a->SalePrice < $b->SalePrice ? 1 : -1;
};
$highToLow = function($a, $b) {
return $a->SalePrice < $b->SalePrice ? -1 : 1;
};
// Sort results highest to lowest
usort($results, $highToLow);
// Sort results lowest to highest
usort($results, $lowToHigh);