У меня есть массив, содержащий несколько строк, каждая строка содержит название города.
Название города иногда встречается в начале строки, иногда в середине, а иногда и в конце строки.
Вопрос
Как создать новый массив, содержащий только названия городов?
$messagesStrings = [
'H…cus',
'Fire reported in the main market in Mogadishu',
'Funtimes in Ibiza',
'Lovely shisa in Cairo,Egypt',
'Blimey! Protests in Tahrir , can't go home',
'Stuck in traffic in Nairobi',
'Kathmandu is beatiful',
'Lovely football at the Bernabau, Madrid, Spain',
'I hate my government, Athens',
'Life is full of surprises in Istanbul'
];
Вы можете попробовать токенизировать свои строки, чтобы отфильтровать существительные, а затем выяснить, есть ли это место, используя какую-нибудь службу, подобную этой Ссылка на географию






Попробуй это:
$messagesStrings = [
'H…cus',
'Fire reported in the main market in Mogadishu',
'Funtimes in Ibiza',
'Lovely shisa in Cairo,Egypt',
'Blimey! Protests in Tahrir , can\'t go home',
'Stuck in traffic in Nairobi',
'Kathmandu is beatiful',
'Lovely football at the Bernabau, Madrid, Spain',
'I hate my government, Athens',
'Life is full of surprises in Istanbul'
];
$regex = '/Madrid|Spain|Ibiza/';
preg_match_all($regex, implode(' ', $messagesStrings), $matches);
var_dump($matches[0]);
Выход
array(3) {
[0]=>
string(5) "Ibiza"
[1]=>
string(6) "Madrid"
[2]=>
string(5) "Spain"
}
Живой пример
Ну, из-за того, что в строке поиска может быть все, вам понадобится список городов в вашей базе данных, и вы найдете их в самой строке поиска. Если ничего подобного нет, это будет означать, что даже если это будет настоящий город, его не будет в базе данных, и поэтому его нельзя будет туда добраться. Но если вы можете найти похожий, вы можете удалить его из строки поиска и получить подробную информацию о городе из базы данных.
У вас есть список или БД всех возможных городов?