В основном, в таком случае, как этот, я бы использовал базу данных и две таблицы:
- Одна таблица для
cities
(или почтовые индексы - не уверены, соответствуют ли они городам) ; в этой таблице вы получите:
- ID
- название города
- широта
- долгота
- Один стол для
users
- ID
- имя пользователя
- zipcode_id: внешний ключ к строке другой таблицы - город, в котором живет пользователь
Пытаясь вычислить, какие пользователи близки к данному, вы на самом деле вычисляете, какие города находятся ближе к тому, в котором находится ваш пользователь, и из этого узнаете соответствующих пользователей.
Чтобы определить, какие города ближе к данному, я полагаю, вы можете найти некоторую формулу - например, см. Следующие вопросы / ответы:
Обратите внимание, что при инициализации вашей базы данных городов / почтовых индексов вам нужно будет определить широту и долготу каждого города - я полагаю, вы можете найти некоторую базу данных с координатами всех городов где-нибудь в Интернете.
(Другое решение - отправлять запросы в службу геокодирования карт Google - но это не допускается условиями их обслуживания, если я правильно помню)