<?php
$warehouses = [
['id' => 1, 'price' => 320, 'distance' => 30], // В радиусе 50 км
['id' => 2, 'price' => 390, 'distance' => 40], // В радиусе 50 км
['id' => 3, 'price' => 420, 'distance' => 45], // В радиусе 50 км
['id' => 4, 'price' => 150, 'distance' => 30], // В радиусе 50 км (Демпинг)
['id' => 5, 'price' => 630, 'distance' => 30], // В радиусе 50 км (Завышение)
['id' => 6, 'price' => 445, 'distance' => 55], // Вне радиуса 50 км
];
// Пороговые значения
$minDifferencePercent = 22; // Порог для исключения демпинга
$maxDifferencePercent = 50; // Порог для исключения завышенной цены
// Шаг 1: Исключаем склады, которые находятся вне радиуса 50 км
$warehousesInRange = array_filter($warehouses, function ($warehouse) {
return $warehouse['distance'] <= 50; // Радиус в 50 км
});
// Шаг 2: Находим самый дешевый склад
$sortedWarehouses = usort($warehousesInRange, function ($a, $b) {
return $a['price'] <=> $b['price']; // Сортируем по цене от дешевого к дорогому
});
$cheapestWarehouse = reset($sortedWarehouses); // Склад с минимальной ценой
// Шаг 3: Сравниваем цены и исключаем склады с демпингом и завышенными ценами
$validWarehouses = array_filter($sortedWarehouses, function ($warehouse) use ($cheapestWarehouse, $minDifferencePercent, $maxDifferencePercent) {
// Рассчитываем разницу по цене
$priceDifferencePercent = (($warehouse['price'] - $cheapestWarehouse['price']) / $cheapestWarehouse['price']) * 100;
// Исключаем склады с ценой ниже на более чем 22% (демпинг) или выше на более чем 50% (завышение)
if ($priceDifferencePercent < -$minDifferencePercent || $priceDifferencePercent > $maxDifferencePercent) {
return false; // Склад исключается
}
return true; // Склад остается
});
// Шаг 4: Рассчитываем среднерыночную цену среди оставшихся складов
$totalPrice = array_sum(array_column($validWarehouses, 'price')); // Суммируем цены оставшихся складов
$averagePrice = $totalPrice / count($validWarehouses); // Средняя цена
// Выводим результаты
echo "Средняя рыночная цена: $averagePrice\n";
echo "Оставшиеся склады:\n";
foreach ($validWarehouses as $warehouse) {
echo "Склад ID: {$warehouse['id']}, Цена: {$warehouse['price']}, Расстояние: {$warehouse['distance']} км\n";
}