Добавить / удалить слово "The" для определенных стран

Я часами пытался заставить свой код работать, это крысиное гнездо if / elses. В основном я хочу проверить название страны по этим двум массивам:

//if its in this array add a 'THE'    
$keywords = array("bahamas","island","kingdom","republic","maldives","netherlands",
                  "isle of man","ivory","philippines","seychelles","usa");
    //if its in this array, take THE off!
    $exceptions = array("eire","hispaniola");

вот и все.

Он посылает мне сумасшедший, и, честно говоря, мне неловко показывать вам свой код. Скажем так, у него есть 2 оператора if, 2 оператора else и 2 цикла foreach. Это цветущий беспорядок, и я надеялся, что кто-то может ошеломить меня, показав мне хороший способ сделать это? Я полагаю, что есть способ использовать только одну строку кода или что-то в этом роде. Спасибо.

Что вы имеете в виду под "сними"? Вы ожидаете, что у вас будет строка вроде «the eire», и тогда вы хотите изменить ее на «eire»? А как насчет ввода типа «Багамы»? Вы хотите проверить, есть ли там "the"? Резюме: Расскажите подробнее о строке ввода, пожалуйста :-)

TToni 12.11.2008 15:05

проблем нет, найдена пользовательская функция substr_in_array (), отсортировано.

Chris J Allen 12.11.2008 15:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
227
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Самым простым было бы разделить его на два шага, добавить «the» для стран, которые соответствуют первому списку, а затем просто удалить его, если оно соответствует словам во втором списке.

$countryKey = strtolower($country);
if (in_array($countryKey, $keywords)) {
    $country = 'The' . $country;
} else if (in_array($countryKey, $exceptions) && stripos($country, 'the ') === 0) {
    $country = substr($country, 4);
}

Зачем вам просто проверять, содержится ли название страны в строке (strpos):

",bahamas,island,kingdom,republic,maldives,netherlands,isle of man,ivory,philippines,seychelles,usa,"

(Обратите внимание на начало и конец ',')

Это быстрее, чем регулярное выражение: если ваша ", название страны" является этой строкой, добавьте 'THE', иначе удалите ее.

Я думаю, вы ищете что-то вроде этого:

if (in_array($country, $keywords)) {
    // add 'the'
} elseif (in_array($country, $exceptions)) {
    // remove 'the'
}

in_array () - ваш друг. Не нужно зацикливаться на этом.

Ответ принят как подходящий

Это основано на ответе @ sgehrig, но обратите внимание на изменение в ваших исключениях:

//if its in this array add a 'THE'    
$keywords = array("bahamas","island","kingdom","republic","maldives","netherlands",
                  "isle of man","ivory","philippines","seychelles","usa");
//if its in this array, take THE off!
$exceptions = array("the eire","the hispaniola");

$countryKey = strtolower($country);
if (in_array($countryKey, $keywords)) {
    $country = 'The ' . $country;
} else if (in_array($countryKey, $exceptions)) {
    $country = substr($country, 4);
}

Упс - вы правы ... В массив нужно включить "the".

Stefan Gehrig 12.11.2008 15:28

Хорошо, это отлично, но с одной стороны, это, похоже, соответствует дословно. Как мне подобрать подходящие Каймановы острова? Придется ли мне жестко закодировать полную строку. У меня много «островов», и я подумал, что подойдет одно правило. Я вижу, что in_array () соответствует только точным строкам.

Chris J Allen 12.11.2008 15:41

проблем нет, найдена пользовательская функция substr_in_array (), отсортировано.

Chris J Allen 12.11.2008 15:50

Другие вопросы по теме