Я пытаюсь найти самое низкое непустое значение из набора значений. Я использую этот код, который работает, но не для долларовых цен различной длины:
$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 самый низкий.
Как я могу это исправить?
Вы можете сначала поместить их в массив, а затем использовать 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;
Скорее всего, цены сохраняются в виде строк, поэтому 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];
}