我经常发现自己需要一个简单的PHP查找数组/表,而不想使用数据库。
例如,我可能有:
下面示出了可以实现它的两种方式。一个比另一个更有效吗?有没有其他更直观的方法来实现这一点?
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条答案
按热度按时间gstyhher1#
这是一个问题,你要做什么与您的查找。
case
或array
。因此,在大多数情况下,
case
选项是较差的,因为它的可扩展性较低,并且不能在运行时更改。要模拟
default
的情况,请使用类似vuv7lop32#
第二个例子。主要原因是它的代码更少,写在新的条目,但它也更灵活的代码,和 * 可能 * 是 * 边际 * 更快。但是要从break语句实现
default
的情况,'lookup'行/函数应该如下所示:juzqafwq3#
显然,你可以用一个更简单的语法来做到这一点:
数组是用第一对[]初始化的,特定的值是用第二对访问的
我不知道,因为哪个版本的php这工程我最近遇到了这个建设上的随机教程,将更新的答案,如果我遇到更多的细节
fwzugrvs4#
我建议在开关块上使用查找阵列,只有极少数例外。坦率地说,我对开关块有偏见,因为如果它们是用适当的编码标准编写的,它们会可怕地膨胀脚本。或者,您可以解决所有这些
case
和break
表达式所产生的膨胀,但这样您就会得到一个非常密集的脚本。不,我强烈建议使用查找数组。它将数据资产与处理完美地分离开来。这会产生干净、可读、可维护的代码。此外,随着应用程序的发展/成熟,如果需要,您可以轻松地将数据集合移植到数据库表中。
关于效率,使用
isset()
或array_key_exists()
(取决于需求)的查找技术非常快,因为php可以引用键。使用基于键的查找每次都会优于
in_array()
。这里有一个片段的上下文...
代码:(Demo)
输出:
当然,您可以写出查找数组中的键,以提高人类的可读性。
假设你的php版本允许,我推荐null coalescing operator。
如果您不需要在任何后续进程中利用查找数组,则可以使用
match()
实现上述代码片段的现代等效物。Demohgqdbh6s5#
当然是后者,特别是如果你有很多数据...