繁体   English   中英

array_search的问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM