Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数组搜索的问题_Php - Fatal编程技术网

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
}