我经常发现自己需要一个简单的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];
答案 0 :(得分:4)
这与您要查找的内容有关。
case
或array
。因此,在大多数情况下,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)
除了少数例外,我建议在开关块上查找数组。坦白说,我对切换块有偏见,因为如果它们使用正确的编码标准编写,它们将使脚本非常膨胀。或者,您可以解决所有这些case
和break
表达式所产生的膨胀,但是然后您得到了令人讨厌的脚本。
不,我强烈建议您使用查找数组。它很好地将数据资产与处理分开。这将产生干净,可读,可维护的代码。此外,随着应用程序的发展/成熟,如果需要,您可以轻松地将数据集合移植到数据库表中。
关于效率,由于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,我最近在随机教程中遇到了这种构造,如果我遇到更多细节,它将更新答案