按数组值排序

时间:2012-07-12 18:58:14

标签: php mysql arrays

我有一个数组,我在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);
}

由于

1 个答案:

答案 0 :(得分:2)

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

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

编辑:

虽然我觉得有一个更好的解决方案在这里讨论和调整数据库范例我已经决定默认并提供他所追求的答案类型的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)
}