Какая проблема у вас точно?Вы говорите, что он устанавливает $country
для двухбуквенного кода последней строки, но печатает ли он все коды до этого?
Это должно быть очевидно, но если у вас возникают проблемы только со значением $country
после завершения цикла, то вы должны понимать, что переменная $country
перезаписывается на каждой итерации цикла,и поэтому будет содержать значение только из последней итерации, когда цикл завершится.
Если проблема заключается в том, что ваш цикл не печатает каждый код, то это звучит так, как будто это проблема с данными, и вам нужно будет показать нам значения в вашем массиве, чтобы определить проблему.
Одна из возможных проблем с данными, которые могут у вас возникнуть, это строка:
$countryinp = array_filter($countryinp, 'trim');
Я думаю, что ваше намерениес помощью этой строки нужно применить функцию trim
к каждому элементу в массиве, но это не то, что делает array_filter
.Функция array_filter
состоит в том, чтобы передать каждый элемент в массиве функции обратного вызова.Эта функция проверяет содержимое элемента, а затем возвращает true
, если содержимое следует сохранить, или false
, если этот элемент должен быть отфильтрован из массива.
Когда вы передаете trim
в array_filter
, единственное, что происходит, это то, что любой элемент массива, который пуст или содержит только пробел, будет удален.Это потому, что после обрезки таких элементов они пусты.PHP интерпретирует пустую строку как false
и удаляет ее из массива.
Это может вызвать проблемы с вашими операторами if
, потому что, если $code
содержит, например, «Афганистан» (обратите внимание на завершающий символ)пробел), тогда оператор if
не поймает его, так как строки не будут совпадать.
Было бы намного лучше, если бы просто запустить строку $code = trim($code);
в начале вашего foreach
loop.
Кроме того, ваш код немного уродлив для меня.Если вы просто собираетесь проверять одну и ту же переменную снова и снова (то есть повторять операторы if ($code == 'Value')
), тогда вам действительно следует использовать вместо этого оператор switch
:
switch ($code) {
case "Afghanistan":
$country = 'AF';
break;
case "Aland Islands":
$country ='AX';
break;
// repeat for other cases
default:
$country = $code;
}