public static function nearestContacts($how_many = 5, $target = NULL) { /* returns a multidimensional array of x contacts, sorted by distance from target, containing an innter array of details */ if (isset($target)) { // set up variables $distance_array = array(); // grab all registered users from db require_once __DIR__ . '/Database.php'; $days_of_week = array(1 => 'mondays', 2 => 'tuesdays', 3 => 'wednesdays', 4 => 'thursdays', 5 => 'fridays', 6 => 'saturdays', 7 => 'sundays'); // set variabe for earliest_time field corresponding to 'today' $earliest_time_today = 'earliest_time_' . $days_of_week[current_time(date('N', time()))]; $latest_time_today = 'latest_time_' . $days_of_week[current_time(date('N', time()))]; $result_set = \ZwsContactsDatabase\Database::getAllRecordsWhereIsNot('id', array('field' => $earliest_time_today, 'value' => 'UNAVL')); // loop postcodes and get distances if (!empty($result_set) && $result_set !== false && is_array($result_set)) { foreach ($result_set as $key => $row) { // get distance from contact to each target. Returns false if error or target not found. $distance = \ZwsContactsDatabase\DistanceCalculator::getDistance(sanitize_text_field($target), sanitize_text_field($row->postcode)); // if distance successfully returned add to the distance array if ($distance !== false) { $distance_array[sanitize_text_field($row->id)] = array('distance' => $distance, 'postcode' => sanitize_text_field($row->postcode), 'lng' => sanitize_text_field($row->lng), 'lat' => sanitize_text_field($row->lat), 'first_name' => sanitize_text_field($row->first_name), 'last_name' => sanitize_text_field($row->last_name), 'phone' => sanitize_text_field($row->phone), 'email' => sanitize_email($row->email), $earliest_time_today => sanitize_text_field($row->{$earliest_time_today}), $latest_time_today => sanitize_text_field($row->{$latest_time_today}), 'max_radius' => sanitize_text_field($row->max_radius), 'extra_info' => esc_textarea($row->extra_info)); } } if (!empty($distance_array)) { $top_n = []; $c = 0; foreach ($distance_array as $key => $value) { // if within max radius, and available, and within requested size of resultset if (apply_filters('zws_filter_enforce_numeric', $value['distance']) <= apply_filters('zws_filter_enforce_numeric', $value['max_radius']) && $c < $how_many) { // add the id to the actual dataset, at it will no longer be available as the key $value['id'] = sanitize_text_field($key); $top_n[$c] = $value; $c++; } } return $top_n; } } return false; } }