0

我有一个数组,我在 mysql fetch 数组循环中构造它。该数组包含以下值:

Array ( [0] => 1 Hour: 1.6
        [1] => 2 Hour: 2.3
        [2] => 3 Hour: 2.8
        [3] => 4 Hour: 3.7
        [4] => 8 Hour: 7.0 )

Array ( [0] => 2 Hour: 1.5
        [1] => 4 Hour: 2.9
        [2] => 8 Hour: 3.8
        [3] => 12 Hour: 5.0
        [4] => 24 Hour: 8.9 )

对给定持续时间的最便宜价格进行排序的最佳方法是什么,所以如果我选择一个小时,我仍然会得到第二个两个小时作为最便宜的返回。

更复杂的是,数组有时可能包含:

Array ( [0] => Free )

我正在考虑使用 getPrice(duration) 函数创建一个类,在我的循环中,我将声明一个新实例并添加一个指向全局数组的指针,然后最终循环遍历该全局数组中的每个项目以找到最便宜的。这个解决方案可行吗?还是有更好的选择?

while($row = mysql_fetch_array($results))
{
    $price = explode(';', $row['price']);
    print_r($price);
}

谢谢

4

1 回答 1

2

您应该在这些值返回 PHP 之前对数据库进行排序,无需在 Web 服务器上做额外的工作。

对于“FREE”值,只需使用 MySQL 将它们变为 0,以便 ORDER BY 操作正常工作。

编辑:

虽然我觉得这里可能有一个更好的解决方案来讨论和调整 DB 范式,但我决定默认并提供 OP 以及他所追求的答案类型(提供的最少信息,我仍然认为这可能很接近) :

$aData = array(
        array(
            '1 Hour: 1.6',
            '2 Hour: 2.3',
            '3 Hour: 2.8',
            '4 Hour: 3.7',
            '8 Hour: 7.0'),
        array(
            '2 Hour: 1.5',
            '4 Hour: 2.9',
            '8 Hour: 3.8',
            '12 Hour: 5.0',
            '24 Hour: 8.9'),
        array(
            '2 Hour: Free',
            '4 Hour: 5.9',
            '8 Hour: 3.5',
            '12 Hour: 6.0',
            '24 Hour: 7.9'),
        );


$aCheapest = array();

// iterate all rows
foreach($aData as $aInfo) {
    // iterate row items
    foreach($aInfo as $aRow) {
        // parse the duration and rate
        list($sRawDuration, $fRate) = explode(': ', $aRow);

        $iDuration = (int)str_replace(' Hour', '', $sRawDuration);
        if(strtolower($fRate) == 'free')
            $fRate = 0.0;
        else
            $fRate = (float)trim($fRate);

        // potentially update the cheapest rate for a duration
        if(!isset($aCheapest[$iDuration]))
            $aCheapest[$iDuration] = $fRate;
        else
            $aCheapest[$iDuration] = min($aCheapest[$iDuration], $fRate);
    }
}

var_dump($aCheapest);

输出:

array(7) {
  [1]=>
  float(1.6)
  [2]=>
  float(0)
  [3]=>
  float(2.8)
  [4]=>
  float(2.9)
  [8]=>
  float(3.5)
  [12]=>
  float(5)
  [24]=>
  float(7.9)
} 
于 2012-07-12T19:10:39.470 回答