Hi! Could we please enable some services and cookies to improve your experience and our website?

PHPize Online / SQLize Online  /  SQLtest Online

A A A
Login    Share code      Blog   FAQ

Online Sandbox for SQL and PHP: Write, Run, Test, and Share SQL Queries and PHP Code

Copy Format Clear

Stuck with a problem? Got Error? Ask AI support!

Copy Clear
Copy Format Clear
<?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"; }
Copy Clear