Макс () возвращает второе по величине число …?

В моем коде ниже print_r ($ vu_array) возвращает:

Array ( [0] => 249.99 [1] => 10.99 [2] => 29.99 [3] => 11.99 [4] => 10.99 )

но max ($ vu_array) возвращает 29,99 и НЕ 249,99! Какое злое колдовство происходит здесь ….?

    $vu_link = get_field('shop_link');

$ch3 = curl_init($vu_link);
curl_setopt($ch3, CURLOPT_RETURNTRANSFER, true);
$cl3 = curl_exec($ch3);

$dom3 = new DOMDocument();
@$dom3->loadHTML($cl3);
$xpath3 = new DOMXpath($dom3);

$price3 = $xpath3->query("//p[@class='special-price']/span[@class='price']");

foreach($price3 as $value) {
$vu_array[] =  str_replace('$', '', $value->nodeValue);
}

РЕДАКТИРОВАТЬ:

var_dump ($ vu_array) возвращает:

array(5) { [0]=> string(43) " 249.99 " [1]=> string(42) " 10.99 " [2]=> string(42) " 29.99 " [3]=> string(42) " 11.99 " [4]=> string(42) " 10.99 " }

3

Решение

Вы делаете лексические (строковые) сравнения. Попробуйте изменить строку внутри цикла:

$vu_array[] = floatval(str_replace('$', '', $value->nodeValue));
2

Другие решения

В вашем массиве есть пробелы, поэтому это должно работать:

<?php

$vu_array = array(" 249.99 ", " 10.99 ", " 29.99 ", " 11.99 ", " 10.99 ");
$vu_array = array_map("trim", $vu_array);
echo max($vu_array);

?>

Выход:

249.99
1

Ваш входной массив держит строковые значения. Если вы хотите max() функция для правильной работы вашего массива должна содержать float-ценности.

Здесь я сделал небольшой пример кода, как получить макс-значение по заданному вами входному массиву.

$string_arr = array( ' 249.99 ', ' 10.99 ', ' 29.99 ', ' 11.99 ', ' 10.99 ' );

$int_arr = array_map('floatval', $string_arr ); //converts all values from string to float

$biggest = max( $int_arr );

var_dump($biggest); //outputs 249.99
0
По вопросам рекламы [email protected]