Я часами пытался заставить свой код работать, это крысиное гнездо 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. Это цветущий беспорядок, и я надеялся, что кто-то может ошеломить меня, показав мне хороший способ сделать это? Я полагаю, что есть способ использовать только одну строку кода или что-то в этом роде. Спасибо.
проблем нет, найдена пользовательская функция substr_in_array (), отсортировано.






Самым простым было бы разделить его на два шага, добавить «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".
Хорошо, это отлично, но с одной стороны, это, похоже, соответствует дословно. Как мне подобрать подходящие Каймановы острова? Придется ли мне жестко закодировать полную строку. У меня много «островов», и я подумал, что подойдет одно правило. Я вижу, что in_array () соответствует только точным строкам.
проблем нет, найдена пользовательская функция substr_in_array (), отсортировано.
Что вы имеете в виду под "сними"? Вы ожидаете, что у вас будет строка вроде «the eire», и тогда вы хотите изменить ее на «eire»? А как насчет ввода типа «Багамы»? Вы хотите проверить, есть ли там "the"? Резюме: Расскажите подробнее о строке ввода, пожалуйста :-)