PHP中的键与in_array()的微优化

时间:2011-04-07 12:50:57

标签: php optimization micro-optimization

因此,您可以选择构建一个数组,因为您知道在代码中需要检查一下该数组中是否存在值。我看到你的方式至少有两个选择:

$values_array = array(
    'my_val',
    'my_val2',
    'and_so_on',
);

if(in_array('my_val', $values_array)) {
    var_dump('Its there!');
}

或者您可以使用关联数组并使用键来包含您的值:

$values_array = array(
    'my_val'    => '',
    'my_val2'   => '',
    'and_so_on' => '',
);

if(isset($values_array['my_val'])) {
    var_dump('Its there!');
}

您会选择哪种方法?为什么?您是否只是为了减少处理时间或减少使用的内存量?

也许你不会使用我的两个微不足道的方法,并有另一种很棒的方法来解决这个简单的问题。

这是一个没有真实世界应用的理论问题,但阵列中可能有数千个选项。这是一个推测性的问题,真正看到每个人都认为哪种方法更好。是否因为可读性,速度或内存使用原因而被认为是这样。

3 个答案:

答案 0 :(得分:5)

真的?使用适合您和您的应用程序需求的变体。特别是如此少的元素,它远远超出了测量范围。

但两者之间存在真正的语义差异。第一个定义一个列表,第二个定义一个映射。如果$array应该代表一个列表,请使用第一个列表,如果它应该代表一个地图,请使用第二个(显而易见,是吧?;))。

完全:让从不这样的微优化方法会影响您的应用程序设计。

答案 1 :(得分:3)

代码可读性和可维护性始终胜过优化。

开发人员时间浪费在试图解开故意钝的代码只是为了节省几微秒,通常超过那些保存的微秒的值。

如果你正在写一些执行速度确实足以影响这种事情的东西,那么PHP(或者实际上任何解释语言)可能是错误的语言。如果您正在尝试优化PHP代码,那么几乎肯定会有更好的起点。

答案 2 :(得分:1)

好吧,我倾向于第二个,因为我感觉感觉这个更优化。而且我经常使用它。
但是,如果它成为瓶颈,我会测量替代品。

无论如何,当我的阵列相对较小时,我永远不会想到这些东西 - 高达数百件。 无论如何,我会尽量避免在重型阵列上进行此类搜索。