PHP Array,根据值获取密钥

时间:2010-12-02 11:45:54

标签: 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;
}

谢谢!

2 个答案:

答案 0 :(得分:25)

使用array_search()

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

所以,在你的代码中:

// 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);
}

如果您希望它不区分大小写,则可以使用此函数代替array_search()

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

如果数组值是正则表达式,则可以使用此函数:

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])以确保已发送有效代码。

答案 1 :(得分:6)

如果$england中的所有值都是唯一的,您可以执行以下操作:

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