将逗号分隔的字符串转换为整数数组?

2022-08-30 06:05:45

下面的代码:

$string = "1,2,3"
$ids = explode(',', $string);
var_dump($ids);

返回数组:

array(3) {
  [0]=>
  string(1) "1"
  [1]=>
  string(1) "2"
  [2]=>
  string(1) "3"
}

我需要将值设置为类型而不是类型。有没有比循环使用数组并将其每个数组转换为更好的方法来做到这一点?intstringforeachstringint


答案 1

您可以通过以下代码来实现此目的,

$integerIDs = array_map('intval', explode(',', $string));

答案 2

因此,我对大量整数的答案中提到的一些方法的性能感到好奇。

制备

只需创建一个介于 0 和 100 之间的 100 万个随机整数的数组。比,我把它们内爆了,拿到绳子。

  $integers = array();
  
  for ($i = 0; $i < 1000000; $i++) {
      $integers[] = rand(0, 100);
  }

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

方法 1

这是马克答案中的一句话:

$integerIDs = array_map('intval', explode(',', $long_string));

方法 2

这是 JSON 方法:

  $integerIDs = json_decode('[' . $long_string . ']', true);

方法 3

我想出了这个作为马克答案的修改。这仍然使用函数,但不是调用我使用常规循环来完成工作,以避免可能产生的开销。我也解析了 vs ,但我尝试了两者,并且在性能方面没有太大差异。explode()array_map()foreacharray_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倍。事实证明,循环是我的情况下最快的循环。我已经用Xdebug完成了基准测试。foreach

编辑:自从最初发布答案以来已经有一段时间了。为了澄清,基准测试是在php 5.6.40中完成的。