Php 按数组值排序
我有一个数组,我在mysql获取数组循环中构造它。此数组包含以下值: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
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)
}