首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否将数组值从字符串转换为整型?

是否将数组值从字符串转换为整型?
EN

Stack Overflow用户
提问于 2012-03-07 07:52:22
回答 13查看 289.6K关注 0票数 287

以下代码:

代码语言:javascript
复制
$string = "1,2,3"
$ids = explode(',', $string);
var_dump($ids);

返回数组:

代码语言:javascript
复制
array(3) {
  [0]=>
  string(1) "1"
  [1]=>
  string(1) "2"
  [2]=>
  string(1) "3"
}

我需要值的类型是int而不是string。有没有比使用foreach遍历数组并将每个string转换为int更好的方法

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2012-03-07 07:55:27

您可以通过以下代码来实现这一点:

代码语言:javascript
复制
$integerIDs = array_map('intval', explode(',', $string));
票数 654
EN

Stack Overflow用户

发布于 2015-11-02 07:50:26

所以我很好奇答案中提到的一些方法对于大量整数的性能。

###Preparation

只是创建了一个包含100万个介于0到100之间的随机整数的数组。然后我把它们内爆拿到了那根线。

代码语言:javascript
复制
  $integers = array();
  
  for ($i = 0; $i < 1000000; $i++) {
      $integers[] = rand(0, 100);
  }

  $long_string = implode(',', $integers);

###Method 1这是来自马克答案的一行代码:

代码语言:javascript
复制
$integerIDs = array_map('intval', explode(',', $long_string));

###Method 2

这是JSON方法:

代码语言:javascript
复制
  $integerIDs = json_decode('[' . $long_string . ']', true);

我想出了这个,作为对###Method答案的修正。这仍然使用explode()函数,但我没有调用array_map(),而是使用常规的foreach循环来完成这项工作,以避免array_map()可能产生的开销。我也在使用(int)intval()进行解析,但我同时尝试了这两种方法,在性能方面没有太大差异。

代码语言:javascript
复制
  $result_array = array();
  $strings_array = explode(',', $long_string);
  
  foreach ($strings_array as $each_number) {
      $result_array[] = (int) $each_number;
  }

结果:

代码语言:javascript
复制
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中完成的。

票数 52
EN

Stack Overflow用户

发布于 2013-03-20 17:41:09

这几乎比explode()array_map()intval()快3倍

代码语言:javascript
复制
$integerIDs = json_decode('[' . $string . ']', true);
票数 49
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9593765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档