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,那么就必须经历这么多案件!我们怎样才能优化这个功能?(不使用数据库.)
我正在考虑构建一个数组并对其进行二进制搜索?但是这意味着每次调用该函数时都会重建数组?我们如何构建一次数组,缓存它并在每次调用此函数时重复使用?
为什么不使用哈希表呢?
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在运行时生成的字节代码并缓存它.
| 归档时间: |
|
| 查看次数: |
1852 次 |
| 最近记录: |