我经常发现自己需要一个简单的PHP查找阵列/表,我不想使用数据库来打扰。 例如,我可能有: 1代表“好” 2代表“坏” 3 S ...

问题描述 投票:0回答:4
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];

	

您要在查找方面做什么。

如果只是键 - >值对的查找 - 数组是一种方法
php arrays switch-statement lookup associative-array
4个回答
7
投票
Strategy模式的好例子 - 否

case

    array
  • 完全这样。
  • SO,case在大多数情况下,选项不如较低,因为它的可扩展性较低,并且无法在运行时间变化。
    要模拟
    default
    案例,请使用类似的东西
    
    
    $result = in_array($key, $lookup) ? $lookup[$key] : $default;

第二个例子。主要原因是在新条目中编写的代码较少,但是它也更灵活,并且很快
imanthy是更快的。但是要实现the break语句的情况,“查找”行/函数应该看起来像:

default

    

明确地说,您可以使用更简单的语法来完成此操作:

3
投票

阵列用第一对[]初始化,并且特定值是访问第二对的。 我不知道以来我最近在随机教程上遇到的这项构造的哪个版本的PHP,如果我遇到更多详细信息,它将更新答案。 我在开关块上建议查找阵列,但很少有例外。 坦率地说,我对开关块有偏见,因为如果它们写有适当的编码标准,它们会非常可怕地张开脚本。 另外,您可以与所有这些表达式产生的膨胀作斗争,但随后您会得到一个可怕的密集脚本。

,我强烈敦促查找阵列。  它将数据资产与处理的精美分开。  这导致干净,可读,可维护的代码。  此外,随着您的应用程序的发展/成熟,您可以在需要时轻松地将数据收集到数据库表。
about效率,采用
$result=[1=>"Good",2=>"Bad",3=>"Ugly"][$code];

case
(取决于要求)的查找技术非常快,因为PHP如何参考密钥。

3
投票
break

这里是上下文的片段...
代码:(

demo

isset()

1
投票
输出:

array_key_exists()
当然,您可以在查找阵列中写出钥匙以提高人类的可读性。
修理您的PHP版本允许它,我建议
无融合操作员

简短。

如果您不需要在任何后续过程中利用查找阵列,则可以用上述片段的现代等效段来实现。 demo

in_array()
    

从php 8.0 php 8.0,您也可以使用

match
表达式。

它比开关更简洁,使用严格的比较,并且具有默认选项,其中查找数组将在没有null合并默认值(

$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
    

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

© www.soinside.com 2019 - 2025. All rights reserved.