用PHP实现一个简单的查找表

时间:2013-04-18 15:51:56

标签: php

我经常发现自己需要一个简单的PHP查找表,我不想打扰使用数据库。

例如,我可能有:

1 stands for "Good"
2 stands for "Bad"
3 stands for "Ugly"

可以实现的两种方式如下所示。一个比另一个更有效吗?还有其他更直观的方法来实现这个吗?

switch($code)
{
    case 1:$result="Good";break;
    case 2:$result="Bad";break;
    case 3:$result="Ugly";break;
    default:$result=NULL;
}

$array=array(1=>"Good",2=>"Bad",3=>"Ugly");
$result=$array[$code];

5 个答案:

答案 0 :(得分:4)

这与您要查找的内容有关。

  • 如果只是查找密钥 - >值对 - 数组是一种方法
  • 如果你想根据密钥执行不同的操作 - 它实际上是Strategy pattern的一个很好的用例 - 完全没有casearray

因此,在大多数情况下,case选项较差,因为它的可伸缩性较低,无法在运行时更改。

要模拟default案例,请使用类似

的内容
$result = in_array($key, $lookup) ? $lookup[$key] : $default;

答案 1 :(得分:2)

第二个例子。主要原因是编写新条目的代码较少,但代码也更灵活,可能 更快。但是要从break语句实现default情况,'lookup'行/函数应如下所示:

$result = (isset($array[$code]) ? $array[$code] : NULL;

答案 2 :(得分:0)

绝对是后者,特别是如果你有很多数据......

答案 3 :(得分:0)

除了少数例外,我建议在开关块上查找数组。坦白说,我对切换块有偏见,因为如果它们使用正确的编码标准编写,它们将使脚本非常膨胀。或者,您可以解决所有这些casebreak表达式所产生的膨胀,但是然后您得到了令人讨厌的脚本。

不,我强烈建议您使用查找数组。它很好地将数据资产与处理分开。这将产生干净,可读,可维护的代码。此外,随着应用程序的发展/成熟,如果需要,您可以轻松地将数据集合移植到数据库表中。

关于效率,由于php如何引用键,因此采用isset()array_key_exists()(取决于要求)的查找技术非常快。

每次使用基于键的查询都会胜过in_array()

这是上下文的摘要...

代码:(Demo

$lookup = [
    null,
    "Good",
    "Bad",
    "Ugly"
];

foreach (range(0, 5) as $test) {
    echo $test , ' : ' , ($lookup[$test] ?? $lookup[0]) , "\n";
}

输出:

0 :         // null
1 : Good
2 : Bad
3 : Ugly
4 :         // null 
5 :         // null 

您当然可以在查找数组中写出键,以提高人们的可读性。

假设您的php版本允许,为简便起见,我推荐null coalescing operator

答案 4 :(得分:0)

显然,您可以使用更简单的语法来做到这一点:

$result=[1=>"Good",2=>"Bad",3=>"Ugly"][$code];

使用第一对[]初始化数组,并使用第二对进行访问特定值

我不知道这是什么版本的php,我最近在随机教程中遇到了这种构造,如果我遇到更多细节,它将更新答案