如何获取将状态名称转换为相应缩写的函数

时间:2015-02-18 00:17:11

标签: php mysql arrays function

如果这个问题得到了解答我很抱歉,但我已经搜索过高低,并且无法解决这个问题。我有一个存储客户地址的MySQL数据库,我希望能够从表中提取地址并打印出来以便从网页发送邮件。问题是状态名称不是表中的缩写形式,所以我一直试图转换它们。当我拉数据时,我将它存储到一个数组。保存状态的数组称为$ state,我使用计数器($ data)从每个数组中提取每组值。这是我对函数的代码:

function convertState($name){
   switch($name){
    case "Alabama":
        return "AL";
        break;
    case "Alaska":
        return "AK";
        break;
    case "Arizona":
        return "AZ";
        break;
    [ ... list all other states ... ]
    case "Wyoming":
        return "WY";
        break;
    case "Other" || "other":
        return $province;
        break;
    default:
        return; 
}

我觉得它应该可以工作,但是当我尝试传递它时:convertState($state[$data]); 没有任何事情发生所有州名仍然拼写出来。我希望它能将每个州的缩写转换成它的缩写。

2 个答案:

答案 0 :(得分:4)

您是否考虑过一个关联数组而不是使用case语句,其中状态的名称是键,缩写是值?

例如:

$states = array(
  "Alabama" => "AL", 
  "Alaska"=> "AK" ...
);

然后当你需要缩写时,你可以通过传递州名作为密钥来获得它。

$ states [' Alabama']将返回' AL'

答案 1 :(得分:1)

我假设您使用某种循环,因为您声明$data是州的索引吗?这让我相信你的$state数组看起来像这样(如果我错了纠正我)

$state = ["Alabama", "Alaska", ......etc];

你正在使用这样的循环:

for($i = 0; $i < count($states); $i++) {
    convertState($states[$i]);
}

或潜在的foreach()循环。

问题在于您返回值而不是分配值。你可以做什么,如@guido的评论中所述,这个:

$state[$data] = convertState($state[$data]);

分配正确的值。或者您可以使用PHP's by-reference并执行以下操作:

function convertState(&$name){
   switch($name){
    case "Alabama":
        $name = "AL";
        break;
    case "Alaska":
        $name = "AK";
        break;
    ...........
    ...... etc
    default:
        return;
    }
    return $name;
}

Example