排序结果在php数组对象中

时间:2014-07-14 21:38:58

标签: php mysql arrays sorting

我正在做一个预订网站,它通过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 ) ) 
      ) 
    ) 
  )
)

2 个答案:

答案 0 :(得分:0)

sql order by是更好的选择。 php数组在较大的数组上很昂贵

在php中进行数组排序看看这些方法

http://php.net/manual/en/array.sorting.php

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