以下代码:
$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
复制相似问题