【发布时间】:2011-07-31 16:18:55
【问题描述】:
因此,您可以选择构建一个数组,因为您知道在代码的后面几行您将需要检查该数组中是否存在值。在我看来,您至少有两种选择:
$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!');
}
您会选择哪种方法,为什么?您的目标仅仅是减少处理时间还是尽量减少使用的内存量?
也许你不会使用我的两种微不足道的方法,而有另一种很棒的方法来解决这个简单的问题。
这是一个没有考虑实际应用的理论问题,但数组中可能有数千个选项。看看每个人都认为哪种方法更好,这确实是一个推测性的问题。无论是出于可读性、速度还是内存使用原因考虑。
【问题讨论】:
-
如果您使用地图(如第二个示例中所示),请考虑使用
array_key_exists而不是isset- 否则会为您尝试访问的每个不存在的键抛出 E_NOTICE。 -
@Piskvor 是的,但许多人已经对这两者进行了基准测试,发现
isset()更快。例如:cybersprocket.com/2010/programming-languages/… 更有趣的是stackoverflow.com/questions/700227/… -
@Treffynnon:如果您担心
isset与array_key_exists的性能,那么您就是在进行过早的优化。这可能很有趣,但如果你一直在它上面花费大量时间,这表明存在问题(更不用说性能问题可能在编译的内置函数之外的其他地方)。 -
@Piskvor +1 进行过早优化,并指出代码中的其他地方更容易炸鱼或低垂的果实更有可能影响最终结果。
-
@Piskvor isset 没有给我未定义键的错误。我做错了什么?
标签: php optimization micro-optimization