在PHP数组中获得最低和最高价值,但没有显示正确的数字

时间:2019-02-14 09:38:33

标签: php arrays numbers

我有以下数组:

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是奇怪的,因为它没有任何逗号。

3 个答案:

答案 0 :(得分:2)

您可以将array_mapstrtr结合使用,以将数组中的所有数字从其当前格式转换为浮点数。然后,您可以使用minmax并使用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

Demo on 3v4l.org

答案 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;