2010-12-02 4 views
9

내가이 배열이있는 경우PHP 배열, 값을 기준으로 키를 얻을

$england = array(
     'AVN' => 'Avon', 
     'BDF' => 'Bedfordshire', 
     'BRK' => 'Berkshire', 
     'BKM' => 'Buckinghamshire', 
     'CAM' => 'Cambridgeshire', 
     'CHS' => 'Cheshire' 
); 
내가 전체 텍스트 버전에서 세 개의 문자 코드를 얻을 수 있기를 원하는

, 나는 다음과 같은 기능을 작성하는 방법 :

$text_input = 'Cambridgeshire'; 
function get_area_code($text_input){ 
    //cross reference array here 
    //fish out the KEY, in this case 'CAM' 
    return $area_code; 
} 

감사합니다!

답변

25

사용 array_search() :

$key = array_search($value, $array); 

그래서 코드에서 :

function array_isearch($haystack, $needle) { 
    foreach($haystack as $key => $val) { 
     if(strcasecmp($val, $needle) === 0) { 
      return $key; 
     } 
    } 
    return false; 
} 

: 당신이 대소 문자를 구분하지, 당신은 array_search() 대신이 기능을 사용할 수 원하는 경우

// returns the key or false if the value hasn't been found. 
function get_area_code($text_input) { 
    global $england; 
    return array_search($england, $text_input); 
} 

배열 값이 정규식이면이 함수를 사용할 수 있습니다.

function array_pcresearch($haystack, $needle) { 
    foreach($haystack as $key => $val) { 
     if(preg_match($val, $needle)) { 
      return $key; 
     } 
    } 
    return false; 
} 

이 경우 배열의 모든 값이 유효한 정규식인지 확인해야합니다.

그러나 값이 <input type="select">에서 오는 경우 더 좋은 해결책이 있습니다. <option>Cheshire</option> 대신 <option value="CHS">Cheshire</option>을 사용하십시오. 그러면 양식이 표시된 이름 대신 지정된 값을 제출하므로 배열에서 검색 할 필요가 없습니다. 유효한 코드가 전송되었는지 확인하려면 isset($england[$text_input])을 확인해야합니다. $england의 모든 값이 고유 경우

+2

1 @Haroldo 인식 문자열로 작업 할 때 array_search은 대소 문자를 구분이다. – SubniC

+0

값이 정규식 인 경우 array_seach를 수행 할 수 있습니까? 그렇다면 preg_quote를 사용하여 약어 및 다른 버전의 계정을 사용할 수 있습니다. – Haroldo

+0

@Thief - 선택 입력 사용에 대한 훌륭한 조언, 감사합니다! – Haroldo

6

, 당신은 할 수 있습니다 :

$search = array_flip($england); 
$area_code = $search['Cambridgeshire']; 
+1

그 코드는 기존 배열보다 iteratinv보다 효율적이지 않은 새로운 배열을 만듭니다. 그러나 array_search보다 낫습니다. 배열 -> 값 조회는 해시 맵을 사용하는 반면, value-> 키 조회는 반복이 필요하므로 많은 값을 조회해야합니다. – ThiefMaster

+0

예. 이전 실행 시간 대 메모리 소비 충돌이 다시 발생했습니다 ... –

관련 문제