我尝试找到一组值的最低非空值。我使用这个代码,但不适用于不同长度的美元格式价格:
$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 是最低的。
我该如何解决?
答案 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;