сортировка — Как найти самое низкое непустое значение в долларах в PHP?

Я пытаюсь найти самое низкое непустое значение из набора значений. Я использую этот код, который работает, но не для долларовых цен различной длины:

$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

Решение

Вы можете сначала поместить их в массив, а затем использовать 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;
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

По вопросам рекламы [email protected]