我有以下数组:
Array
(
[0] => 124,95
[1] => 139,95
[2] => 149,95
[3] => 1200
[4] => 150
[5] => 154,95
[6] => 130
[7] => 189,95
[8] => 199,95
[9] => 30
[10] => 150
)
我正在尝试从中获得最低(30)和最高(1200)的数字。
所以我做到了:
while($getpricesproducts = $getpricesproductscon->fetch_assoc()){
$prijsarray[] = $getpricesproducts['prijs'];
}
// Lowest and highest price to put in price slider
$prijslow = min($prijsarray);
$prijshigh = max($prijsarray);
echo $prijslow;
echo $prijshigh;
$prijsarray
在数组上方。
但是回显的值是最小值30和最大值150。这是为什么?它与逗号在某些方面有关系吗?仍然没有最大数字1200是奇怪的,因为它没有任何逗号。
答案 0 :(得分:2)
您可以将array_map
与strtr
结合使用,以将数组中的所有数字从其当前格式转换为浮点数。然后,您可以使用min
和max
并使用number_format
将它们转换回您的格式:
$new_array = array_map(function ($v) { return (float)strtr($v, array(',' => '.', '.' => '')); }, $array);
echo number_format(min($new_array), 2, ',', '.') . "\n";
echo number_format(max($new_array), 2, ',', '.') . "\n";
输出:
30,00
1.200,00
答案 1 :(得分:0)
您可以按以下步骤修改代码:
while($getpricesproducts = $getpricesproductscon->fetch_assoc()){
$prijsarray[] = (float) str_replace(',', '.', $getpricesproducts['prijs']);
}
但是正如其他人所评论的那样,如果您修复数据库以将价格存储为浮点数,那就更好了。
答案 2 :(得分:0)
如max函数文档中所述:
将使用标准比较不同类型的值 比较规则。例如,将比较一个非数字字符串 到一个整数,就好像它是0,但是是多个非数字字符串 值将按字母数字进行比较。返回的实际值 将是原始类型,不应用任何转换。
因此,您可以尝试将所有值转换为float,然后再插入数组:
while($getpricesproducts = $getpricesproductscon->fetch_assoc()){
$prijsarray[] = floatval(str_replace(',', '.', $getpricesproducts['prijs']));
}
// Lowest and highest price to put in price slider
$prijslow = min($prijsarray);
$prijshigh = max($prijsarray);
echo $prijslow;
echo $prijshigh;