所以我对大量整数的答案中提到的一些方法的性能感到好奇。
###准备
只需创建一个由 0 到 100 之间的 100 万个随机整数组成的数组。然后,我将它们内爆以获得字符串。
$integers = array();
for ($i = 0; $i < 1000000; $i++) {
$integers[] = rand(0, 100);
}
$long_string = implode(',', $integers);
###方法一
这是马克回答中的一条:
$integerIDs = array_map('intval', explode(',', $long_string));
###方法2
这是 JSON 方法:
$integerIDs = json_decode('[' . $long_string . ']', true);
###方法3
我想出了这个作为对马克答案的修改。这仍然使用explode() 函数,但我没有调用array_map(),而是使用常规foreach 循环来完成工作以避免array_map() 可能产生的开销。我也是用(int) vs intval()解析的,但是我都试过了,在性能方面并没有太大的区别。
$result_array = array();
$strings_array = explode(',', $long_string);
foreach ($strings_array as $each_number) {
$result_array[] = (int) $each_number;
}
结果:
Method 1 Method 2 Method 3
0.4804770947 0.3608930111 0.3387751579
0.4748001099 0.363986969 0.3762528896
0.4625790119 0.3645150661 0.3335959911
0.5065748692 0.3570590019 0.3365750313
0.4803431034 0.4135499001 0.3330330849
0.4510772228 0.4421861172 0.341176033
0.503674984 0.3612480164 0.3561749458
0.5598649979 0.352314949 0.3766179085
0.4573421478 0.3527538776 0.3473439217
0.4863037268 0.3742785454 0.3488383293
底线是平均值。对于 100 万个整数,第一种方法看起来要慢一些,但我没有注意到答案中所述方法 2 的 3 倍性能增益。事实证明,foreach 循环在我的情况下是最快的。我已经用 Xdebug 完成了基准测试。
编辑:自从最初发布答案以来已经有一段时间了。澄清一下,基准测试是在 php 5.6.40 中完成的。