如何在PHP中找到最低的非空元格格式值?

时间:2014-09-19 23:21:04

标签: php sorting variables min

我尝试找到一组值的最低非空值。我使用这个代码,但不适用于不同长度的美元格式价格:

$lowestPrice = min($var1 ?: PHP_INT_MAX, $var2 ?: PHP_INT_MAX, $var3 ?: PHP_INT_MAX, $var4 ?: PHP_INT_MAX);

如果价格与它的长度相同,但如果你比较 $ 20.99 $ 129.00 $ 12.50 ,它会说 $ 129.00 是最低的。

我该如何解决?

2 个答案:

答案 0 :(得分:1)

最有可能将价格保存为字符串,这就是129.00(以1开头)低于29.00(从2开始)的原因。您需要将价格转换为双倍:

首先,您需要将变量用作列表:

$array = list($var1, $var2, $var3, ...);

或者,如果有很多$var<x> s,那么你可以使用变量来创建数组:

// $var1, $var2, ..., $var13 do exist;
// $var14 does not, so 13 is the highest_var_number.
$highest_var_number = 13;

// Fill the array with the values.
$array = array();
for ($i = 0; $i < $highest_var_number; $i++) {
    $array[] = ${"var".$i};
}

然后将所有数字转换为双打:

foreach ($array as $key => $value) {
    $array[$key] = (double) $array[$key];
}

答案 1 :(得分:1)

您可以先将它们放入数组中,然后使用natsort()。例如:

$values = array('$1,129.00', '$22.50', '', '$20.99');
$values = array_filter($values);
$temp = $values;
array_walk($temp, function(&$val, $key){
    $val = str_replace(',', '', ltrim($val, '$'));
});
natsort($temp);
$key = key($temp);
$lowestPrice = $values[$key];
echo $lowestPrice;