Yastr
@Yastr

Как получить минимальную цену из массива php?

Есть массив:
Array ( [0] => 64 654 руб. [1] => 231 654 руб. [2] => 9 879 руб. [3] => 164 руб. [4] => 2 815 руб. )


Есть задача:
Получить минимальную цену с сохранением всех пробелов и валютных обозначений.

Сейчас делаю так:
Привожу значения к простому числу и выбираю наименьшее, но теряются пробелы и тд

Подскажите пожалуйста как правильно это сделать.
  • Вопрос задан
  • 343 просмотра
Решения вопроса 3
ponich
@ponich
php,mysql,js
<?php

$numbers = [
    '64 654 руб.',
    '231 654 руб.',
    '9 879 руб.',
    '164 руб.',
    '2 815 руб.'
];

var_dump(
    getMinNumberFromArray($numbers, true), // float(164)
    getMinNumberFromArray($numbers) // string(11) "164 руб.",
);

/**
 * Поиск минимального числа в массиве
 * @param array $numbers
 * @param boolean $format
 * @return string|flaot|null
 */
function getMinNumberFromArray(array $numbers, $format = false)
{
    $minIndex = null;
    $minNum = null;

    foreach ($numbers as $k => $number) {
        $number = (float)preg_replace("/[^0-9,.-]/", "", $number);

        if (is_null($minNum) || $number < $minNum) {
            $minIndex = $k;
            $minNum = $number;
        }
    }

    if(is_null($minNum)){
        return null;
    }

    return ($format) ? $minNum : $numbers[$minIndex];
}
Ответ написан
$data = [
	'64 654 руб.',
	'231 654 руб.',
	'9 879 руб.',
	'164 руб.',
	'2 815 руб.',
];

usort($data, function ($a, $b) {
	return preg_replace('/[^0-9]/', '', $a) <=> preg_replace('/[^0-9]/', '', $b);
});

$min = current($data);
Ответ написан
@pantsarny
<?php
function minPrice($prices)
{
    usort($prices, function ($a, $b) {
        $a = (int)preg_replace('/[^0-9]/', '', $a);
        $b = (int)preg_replace('/[^0-9]/', '', $b);
        if ($a > $b) 
            return 1;
        elseif ($a < $b)
            return -1;
        else
            return 0;
    });
    return reset($prices);
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы