Использование 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 @Haroldo знать, что array_search чувствителен к регистру при работе со строками. – SubniC 2010-12-02 11:50:28
Можно ли сделать array_seach, где значение является регулярным выражением? Тогда я мог бы использовать preg_quote и учитывать аббревиатуры и разные версии и ... – Haroldo 2010-12-02 11:54:51