在一个非常紧凑的循环中,我需要访问包含数百万个元素的数组中的数万个值。键可以是未定义的: 在这种情况下,返回没有任何错误消息的 NULL 是合法的:
数组键存在: 元素的返回值。 数组键不存在: 返回 null。
我知道多种解决方案:
if (isset($lookup_table[$key])) {
return $lookup_table[$key];
} else {
return;
}
或者
@return $lookup_table[$key];
或者
error_reporting(0);
$return = $lookup_table[$key];
error_reporting(E_ALL);
return $return;
所有的解决方案都远非最佳:
我的问题 是,如果我错过了一种避免错误处理的方法,但是却使用了一个 Btree 查找?
该数组缓存复杂计算的结果-复杂到要实时完成。 在数十亿个可能的价值中,只有数百万个产生有效的结果。数组类似于1234567 = > 23457,1234999 = > 74361,... 。它被保存到一个几兆字节的 PHP 文件中,并在执行开始时包含 _ once-d。初始加载时间并不重要。 如果没有找到该键,那只是意味着此特定值将不会返回有效的结果。麻烦的是要做到这一点5万以上每秒。
由于没有办法通过单一查找和不进行错误处理来获得值,所以我很难接受单一答案。相反,我支持所有伟大的贡献。
最有价值的投入包括:
关于 PHP 如何处理数组有很多困惑。如果检查源代码,您将看到所有数组都是平衡树。构建自己的查找方法在 C 和 C + + 中很常见,但是在 PHP 这样的高级脚本语言中不能执行。