以下代码:
$string = "1,2,3"
$ids = explode(',', $string);
var_dump($ids);返回数组:
array(3) {
[0]=>
string(1) "1"
[1]=>
string(1) "2"
[2]=>
string(1) "3"
}我需要值的类型是int而不是string。有没有比使用foreach遍历数组并将每个string转换为int更好的方法
发布于 2012-03-07 07:55:27
您可以通过以下代码来实现这一点:
$integerIDs = array_map('intval', explode(',', $string));发布于 2015-11-02 07:50:26
所以我很好奇答案中提到的一些方法对于大量整数的性能。
###Preparation
只是创建了一个包含100万个介于0到100之间的随机整数的数组。然后我把它们内爆拿到了那根线。
$integers = array();
for ($i = 0; $i < 1000000; $i++) {
$integers[] = rand(0, 100);
}
$long_string = implode(',', $integers);###Method 1这是来自马克答案的一行代码:
$integerIDs = array_map('intval', explode(',', $long_string));###Method 2
这是JSON方法:
$integerIDs = json_decode('[' . $long_string . ']', true);我想出了这个,作为对###Method答案的修正。这仍然使用explode()函数,但我没有调用array_map(),而是使用常规的foreach循环来完成这项工作,以避免array_map()可能产生的开销。我也在使用(int)和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中完成的。
发布于 2013-03-20 17:41:09
这几乎比explode()、array_map()和intval()快3倍
$integerIDs = json_decode('[' . $string . ']', true);https://stackoverflow.com/questions/9593765
复制相似问题