[英]Issues with array_search
当我运行以下命令时,得到的是'BC'
,但是我试图得到'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."));
?>
一个数组中不能有多个键。 当您这样做时,第二个优先于第一个。
$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',
);
您正在将"BC"
传递给cleanProvince
。 那不在$values
,所以array_search
返回false
,因此cleanProvince
返回"BC"
。
如建议的那样,交换键和值将产生所需的结果,并避免调用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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.