2012-12-05 5 views
0

이 스크립트에는 어떤 문제가 있는지 잘 모르겠습니다. 나는 그것을 실행할 때 단지 약어의 첫 글자 만 준다.약어에 대한 PHP 스크립트가 올바르게 작동하지 않습니다.

요약 부분을 쓰지 않았으므로 온라인으로 발견했습니다. 내 스크립트의 유일한 부분은 GET 및 Includes입니다.

상태 변수를 상태로 설정 했으므로 코드의 일부분이 아닌 것을 알고 있으므로 같은 결과를 얻습니다. 문제가 무엇인지 아는 사람이라면 알려주세요.

다음은 제안 된대로 업데이트 된 코드입니다. 여전히 같은 문제가 있습니다.

$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]; 
} 
+1

알고리즘을 변경했습니다. 수동 검색을 수행하면 해시 테이블이 낭비됩니다. 포르쉐를 구입 한 다음 모든 곳으로 밀어 넣는 것과 같습니다. – RonaldBarzell

+0

무엇으로 변경 하시겠습니까? 나는 PHP를 가진 초심자이다. – DRK

+0

PHP 초보자라면 다음 문서를 읽어보십시오. http://php.net/manual/en/ –

답변

3

가 이미이 질문에 훌륭한 대답하지만, 영업 이익은 여전히 ​​문제가되기 때문에 여기에 대체 솔루션이 있습니다. 배열을 $ 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 

코드는 어떤 방식 으로든 작동하도록 설계되었습니다.

+0

그게 효과가! 고마워요! – DRK

3

당신은 리팩토링해야 당신의 $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]; 
} 
+0

알았어. 나는 여전히 똑같은 문제를 겪고있다. 나는 $ state = 'Alabama'를 만든다. $ state [ 'abbrev']를 echo 할 때 A를 얻습니다; – DRK

+0

코드를 잘 읽으면'$ states' 배열에'abbrev' 키가 없다는 것을 알 수 있습니다. 사실,'echo $ states [ 'Alabama']는 올바른 약어 인'AL'을 출력 할 것입니다. '$ state = 'Alabama''를 가지고 있다면'$ states [$ state]'를 echo 할 필요가 있습니다! –

+0

나는 상태 [ 'state']를 시도하고 아무 것도 얻지 못했다. 내가 [ 'state'] 상태를 사용하면 나는 A를 얻습니다. $ states [ 'Alabama'] 나는 아무것도 얻지 못합니다. – DRK

관련 문제