PHP优化一个很长的开关案例声明

use*_*157 4 php arrays optimization caching switch-statement

请看下面的代码

function GetAreaName($AreaCode)
{
  switch ($AreaCode) 
  {
    case 201: return 'New Jersey';
    case 202: return 'Washington';
    // this goes on till
    case 999: return '';
  }
}
Run Code Online (Sandbox Code Playgroud)

假设AreaCode是998,那么就必须经历这么多案件!我们怎样才能优化这个功能?(使用数据库.)

我正在考虑构建一个数组并对其进行二进制搜索?但是这意味着每次调用该函数时都会重建数组?我们如何构建一次数组,缓存它并在每次调用此函数时重复使用?

Jos*_*ser 7

为什么不使用哈希表呢?

class Area {

private $areaCodes = array(
            201 => 'New Jersey',
            202 => 'Washington',
            // this goes on till
            999 => '';
        );

    function getStateByAreaCode ($areaCode) {

        if (array_key_exists($areaCode, $this->areaCodes)) {
           return $this->areaCodes[$areaCode];
        } else {
           return false;
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

像这样称呼它:

$area = new Area();
$city = $area->getStateByAreaCode(303);
Run Code Online (Sandbox Code Playgroud)

只需将您的课程保存在文件中,并在需要时将其包含在内.

你问如何防止每个请求创建数组: 通过把它放在一个类中你至少保持干净.技术上仍然会在每个请求中创建,但除非您的阵列很大(比美国的区域代码大),否则不会造成性能问题.如果您担心每次有请求时都要构建数组,那么请查看代码优化器,如APC或Zend Optimizer.这基本上采用PHP在运行时生成的字节代码并缓存它.