【问题标题】:How to get a function to convert state names to the corresponding abbreviations如何获得将状态名称转换为相应缩写的函数
【发布时间】:2015-02-18 00:17:11
【问题描述】:

如果这个问题已经得到回答,我深表歉意,但我已经搜索了高低,但无法弄清楚这一点。我有一个存储客户地址的 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]); 什么也没有发生,所有州名仍然拼写出来。我希望它在打印时将每个状态转换为它的缩写。

【问题讨论】:

  • 会不会是小写/大写的问题?尝试这样的事情,看看会发生什么? switch(strtolower ($name)) { case "wyoming": return "WY";休息; }
  • 你已经这样称呼它了:$state[$data] = convertState($state[$data]); 对吧?因为函数会返回转换后的值,所以不会在传递的参数中改变它
  • 不,我不是那样称呼它的。哎呀。谢谢它完美地工作!案例“其他”|| “其他”:返回$省;休息;是现在唯一不起作用的方面,但我想我可以解决这个问题。再次感谢!
  • @Wayfrae case "Other": case "other": ... break; 是这样做的方法

标签: php mysql arrays function


【解决方案1】:

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

例如:

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

然后,当您需要缩写时,您可以通过传递州名作为键来获取它。

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

【讨论】:

  • 这是更好的方法吗?
  • 简短回答,是的。它也会更快。如果您正在寻找怀俄明州的案例陈述,则必须将该名称与之前的所有案例进行比较。我建议您像其他人所说的那样将所有键设为小写,并在将其用作键之前在名称上使用 strlower。
【解决方案2】:

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

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

你会使用这样的循环:

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

或者可能是foreach() 循环。

问题是您正在返回值而不是分配它。正如@guido 的 cmets 所述,您可以做什么:

$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

【讨论】:

  • 是的,我正在使用 while 循环,因为我希望能够从特定日期窗口中选择客户信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-16
  • 1970-01-01
  • 2016-08-27
  • 1970-01-01
  • 2018-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多