Php 数组搜索的问题
当我运行以下命令时,我得到了Php 数组搜索的问题,php,Php,当我运行以下命令时,我得到了'B.C.,但我正在尝试得到'BC' 我设置了array\u search来进行严格的比较,为什么它不返回“BC” 如果我通过了“阿尔伯塔省”,我会得到“AB”,这是正确的 <? function cleanProvince($province) { $values = array( 'AB' => 'Alberta', 'BC' => 'B.C.', 'BC' => 'British C
'B.C.
,但我正在尝试得到'BC'
我设置了array\u search
来进行严格的比较,为什么它不返回“BC”
如果我通过了“阿尔伯塔省”
,我会得到“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',
);
您正在将
“卑诗省”
传递到清洁省
。这不在$values
中,因此array\u search
返回false
,因此cleanProvince
返回“B.C.”
正如建议的那样,交换键和值将产生所需的结果,并避免调用array\u search()
我只能假设它有相当高的开销(在大多数情况下没有意义,但如果以迭代方式调用…)
jrubins:他得到了文章中指定的“B.C.”。你可能会更好地使用长名称作为键,缩写作为值来构建数组。然后搜索不会重复的键。错误抑制操作符不是你的朋友。使用
isset()
,等等(同样,在这种情况下,它永远不会抑制任何内容)@Rocket如果两个元素的键不同且值相同,那么array\u search只返回第一个元素,是吗?如何从这里获取所有元素?@Jusnit:改用<代码>$keys=array\U keys($values,$PROVICTION,TRUE)。
function getProvince($name){
$values = array(
'Onatrio' => 'ON',
'Ontaroi' => 'ON',
'O.N.' => 'ON',
// ...
);
return isset($values[$name])
? $values[$name]
: $name; // or null I suppose
}