PHP-скрипт для состояний сокращений работает неправильно

Я не уверен, что не так с этим сценарием. Когда я запускаю его, он дает мне только первую букву аббревиатуры.

Я не писал аббревиатуру, я нашел это в Интернете. Единственные части сценария, которые принадлежат мне, — это GET и Включает.

Я установил переменную состояния в состояние, и я все еще получаю то же самое, поэтому я знаю, что это не моя часть кода. Если кто-нибудь знает, в чем проблема, пожалуйста, дайте мне знать.

Вот обновленный код, как было предложено. Все еще с той же проблемой.

$state = 'Alabama';

function convert_state($name, $get = 'abbr') {
$states = array(
'Alabama'=>'AL',
'Alaska'=>'AK',
'Arizona'=>'AZ',
'Arkansas'=>'AR',
'California'=>'CA',
'Colorado'=>'CO',
'Connecticut'=>'CT',
'Delaware'=>'DE',
'Florida'=>'FL',
'Georgia'=>'GA',
'Hawaii'=>'HI',
'Idaho'=>'ID',
'Illinois'=>'IL',
'Indiana'=>'IN',
'Iowa'=>'IA',
'Kansas'=>'KS',
'Kentucky'=>'KY',
'Louisiana'=>'LA',
'Maine'=>'ME',
'Maryland'=>'MD',
'Massachusetts'=>'MA',
'Michigan'=>'MI',
'Minnesota'=>'MN',
'Mississippi'=>'MS',
'Missouri'=>'MO',
'Montana'=>'MT',
'Nebraska'=>'NE',
'Nevada'=>'NV',
'New Hampshire'=>'NH',
'New Jersey'=>'NJ',
'New Mexico'=>'NM',
'New York'=>'NY',
'North Carolina'=>'NC',
'North Dakota'=>'ND',
'Ohio'=>'OH',
'Oklahoma'=>'OK',
'Oregon'=>'OR',
'Pennsylvania'=>'PA',
'Rhode Island'=>'RI',
'South Carolina'=>'SC',
'South Dakota'=>'SD',
'Tennessee'=>'TN',
'Texas'=>'TX',
'Utah'=>'UT',
'Vermont'=>'VT',
'Virginia'=>'VA',
'Washington'=>'WA',
'West Virginia'=>'WV',
'Wisconsin'=>'WI',
'Wyoming'=>'WY'
);
if($get == 'name') {
// in this case $name is actually the abbreviation of the state name and you want the full name
$states = array_flip($states);
}

return $states[$name];
}

person DRK    schedule 05.12.2012    source источник
comment
Я бы изменил ваш алгоритм. Вы тратите хэш-таблицу, выполняя поиск вручную. Это как купить Порше, а потом везде на нем ездить.   -  person RonaldBarzell    schedule 05.12.2012
comment
Поменять на что? Я новичок в PHP.   -  person DRK    schedule 05.12.2012
comment
Если вы новичок в PHP, вам следует начать с чтения документации: php.net/manual/en< /а>   -  person Matteo Tassinari    schedule 06.12.2012


Ответы (2)


На этот вопрос уже есть отличный ответ, но, поскольку у ОП все еще есть проблемы с этим, вот альтернативное решение. Обратите внимание, что массив $a2s должен быть полностью заполнен, так как я добавил только два состояния, чтобы сделать его коротким. Сохраните следующее в файл по вашему выбору (например, state.php):

<?php
$state = $_GET['state'];
echo convert_state($state);

function convert_state($key) {
    $a2s = array( 
        'AL'=>'Alabama',
        'CA'=>'California'
    );
    $array = (strlen($key) == 2 ? $a2s : array_flip($a2s));
    return $array[$key];
}
?>

Чтобы запустить вышеуказанное, вы должны ввести в браузере одно из следующего (при условии, что ваш файл — state.php):

state.php?state=AL
state.php?state=Alabama

Код предназначен для работы в любом случае.

person RonaldBarzell    schedule 05.12.2012

Вы должны реорганизовать свой $states как:

$states = array(
  'Alabama' => 'AL',
  'Alaska' => 'AK',
  [...]
);

Тогда ваша функция становится:

function convert_state($name, $get = 'abbr') {
  $states = [.. see above ..];

  if($get == 'name') {
    // in this case $name is actually the abbreviation of the state name and you want the full name
    $states = array_flip($states);
  }

  return $states[$name];
}
person Matteo Tassinari    schedule 05.12.2012
comment
Хорошо, я попробовал это, и у меня все еще та же проблема. Я делаю $state = 'Алабама'; и я получаю A, когда повторяю $state['abbrev']; - person DRK; 05.12.2012
comment
Если вы хорошо прочитаете мой код, то увидите, что в массиве $states нет ключа abbrev. Фактически, echo $states['Alabama'] напечатает AL, что является правильной аббревиатурой. Если у вас есть $state = 'Alabama', вам нужно echo $states[$state]! - person Matteo Tassinari; 05.12.2012
comment
Я пробовал состояния ['состояние'] и ничего не получил. Если я использую state['state'] я получаю A. $states['Alabama'] я ничего не получаю. - person DRK; 05.12.2012
comment
Я не могу понять, что вы делаете неправильно, но, похоже, вам нужно освежить в памяти то, как работают массивы PHP: очевидно, что $states['state'] ничего не производит, поскольку массив $states не имеет ключа state! Не могли бы вы обновить свой вопрос, указав подробности нового кода, который вы тестируете? - person Matteo Tassinari; 05.12.2012
comment
Ок обновил. Я новичок в php, так что это может быть какая-то простая ошибка с моей стороны. - person DRK; 05.12.2012