当我运行以下内容时,我得到'B.C.'
,但我正试图获得'BC'
。
我设置array_search
进行严格比较,为什么不返回"BC"
?
如果我通过"Alberta"
,我会得到"AB"
,这是正确的。
<?
function cleanProvince($province)
{
$values = array(
'AB' => 'Alberta',
'BC' => 'B.C.',
'BC' => 'British Columbia',
'ON' => 'Ontario',
'ON' => 'Onatrio',
'ON' => 'Ont',
'NS' => 'Nova Scotia',
'QC' => 'Quebec'
);
if ($key = array_search(@$province, $values, true)) {
return $key;
} else {
return $province;
}
}
echo (cleanProvince("B.C."));
?>
答案 0 :(得分:7)
一个阵列中不能有多个键。当你这样做时,第二个会覆盖第一个。
$values = array(
'AB'=>'Alberta',
'BC'=>'B.C.',
'BC'=>'British Columbia', # Overrides 'B.C.'
'ON'=>'Ontario',
'ON'=>'Onatrio', # Overrides 'Ontario'
'ON'=>'Ont', # Overrides 'Onatrio'
'NS'=>'Nova Scotia',
'QC'=>'Quebec',
);
您将"B.C."
传递给cleanProvince
。这不在$values
中,因此array_search
会返回false
,因此cleanProvince
会返回"B.C."
。
答案 1 :(得分:1)
按照建议,交换密钥和值将产生所需的结果,并避免调用array_search()
,我只能假设它具有相当高的开销(在大多数情况下有争议的点,但如果迭代地召唤...... )。
function getProvince($name){
$values = array(
'Onatrio' => 'ON',
'Ontaroi' => 'ON',
'O.N.' => 'ON',
// ...
);
return isset($values[$name])
? $values[$name]
: $name; // or null I suppose
}