php - 按数组值排序

标签 php mysql arrays

我有一个数组,是在 mysql 获取数组循环中构造的。该数组包含以下值:

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);
}

谢谢

最佳答案

您应该在这些值返回 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)
} 

关于php - 按数组值排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11458754/

相关文章:

PHP 面向对象 : How to get database rows as objects?

MySQL SELECT 超过两个表

Javascript:从数组中的对象中选择属性

php - 如何在 osx 上使用带有自签名证书的 docker 容器?

php - Node.js 聊天 - 用户身份验证

java - 无法在 MySql JDBC 中获取自动生成的 ID

php - 如何根据月份对 MySql 行进行分组?

javascript - 如何从数组中随机选择多个元素?

c# - 查找多维数组中仅第一维的长度

php - 如何使用 mysql 将 id 的所有列值回显到行中