$distances = []; $sort_distance = []; foreach (DB\Depot::all() as $depot) { $d = Helper::getDistanceBetweenCordinates($customer_address['latitude'], $customer_address['longitude'], $depot->latitude, $depot->longitude); $distances[$depot->id] = ['depot_id' => $depot->id, 'depot' => $depot->depot, 'depot_postcode' => $depot->postcode, 'distance_meters' => $d]; // Create sort array for array_multisort $sort_distance[$depot->id] = $d; } // Sort the distances by shortest distance first array_multisort($sort_distance, SORT_ASC, $distances); // Update customer.depot and depot_distance if ($distances && isset($distances[0])) { Log::msg('Closest three depots to the customer are: ' . print_r(array_slice($distances, 0, 3), 1)); // Update depot and depot distance for all the customers with the postcode Log::msg('Updating customers depot to "' . $distances[0]['depot_id'] . '"'); $customers_to_update->update(['depot' => $distances[0]['depot_id'], 'depot_distance' => $distances[0]['distance_meters'], 'no_results' => 0]); } else { Log::msg('Invalid $distances array: ' . print_r($distances, 1)); } } else { Log::msg('No latitude/longitude information found for postcode: ' . $customer->postcode); // Update no_results flag for all the customers with this postcode. Log::msg('Updating `no_results` for all the customers with this postcode.'); $customers_to_update->update(['no_results' => 1]); } Log::msg('Continue to the next customer ...', true, 1); sleep(1); } } Log::msg('Script Ended', true, 1);