Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按数组值排序_Php_Mysql_Arrays - Fatal编程技术网

Php 按数组值排序

Php 按数组值排序,php,mysql,arrays,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

我有一个数组,我在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操作正常工作

编辑:

虽然我觉得有一个更好的解决方案,在这里讨论和调整DB范式,但我决定默许并提供OP/他想要的答案类型(提供的信息最少,我仍然认为这很接近):

输出:

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

我不明白你在DB中对这些值进行排序是什么意思。它们作为文本记录“1小时:1.6;2小时:2.3…”存储在数据库中,允许每个记录有自己独立的持续时间。这允许不创建24+个不同的行,其中大多数记录为空。执行SELECT语句时,请使用ORDER BY子句。我不知道你为什么要把“小时:2.3”放在一个字段中,似乎有一个浮动字段,只放“2.3”更合理,但无论哪种方式,你都可以去掉“小时”部分,仍然通过排序方式对结果进行排序。如果在每种情况下,我们都使用单一的持续时间,那么这就行了。我希望能够选择从选择的关税和排序的最便宜的价格。每个记录都有自己的非标准持续时间和价格,给定一个持续时间,我想按最便宜的时间进行排序和订购,例如,选择两小时的持续时间并返回两小时的价格。要仅在SQL语句中执行此操作,我不需要24行以上的单独行,例如按持续时间从表顺序选择*两小时。我的实现理念是在一个字段中返回所有持续时间和价格,从而减少数据冗余。我希望我的解释已经很清楚了。谢谢。谢谢,我们已经修改并构建了所提供的示例代码,以获得所需的结果。似乎我们缺少一些重要信息,您显示了一个使用分号作为分隔符的分解调用,然后是对$row['price']的引用,但您共享的数据中没有分号或关联数组。
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)
}