如何将数组值从字符串转换为int?

$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遍历数组并将每个字符串转换为int更好的方法呢?


偶然的你
浏览 2293回答 3
3回答

喵喵时光机

因此,我对答案中提到的某些针对大量整数的方法的性能感到好奇。制备只是创建一个由0到100之间的100万个随机整数组成的数组。然后,我强加了它们以获得字符串。&nbsp; $integers = array();&nbsp; for ($i = 0; $i < 1000000; $i++) {&nbsp; &nbsp; &nbsp; $integers[] = rand(0, 100);&nbsp; }&nbsp; $long_string = implode(',', $integers);方法1这是Mark的回答:$integerIDs = array_map('intval', explode(',', $long_string));方法2这是JSON方法:&nbsp; $integerIDs = json_decode('[' . $long_string . ']', true);方法3我想出了这个作为Mark答案的修改。这仍在使用explode()函数,但不是使用调用而是array_map()使用常规foreach循环来完成这项工作以避免产生开销array_map()。我也在用(int)vs进行解析intval(),但是我都尝试了两者,并且在性能方面并没有太大差异。&nbsp; $result_array = array();&nbsp; $strings_array = explode(',', $long_string);&nbsp; foreach ($strings_array as $each_number) {&nbsp; &nbsp; &nbsp; $result_array[] = (int) $each_number;&nbsp; }结果:Method 1&nbsp; &nbsp; &nbsp; &nbsp; Method 2&nbsp; &nbsp; &nbsp; &nbsp; Method 30.4804770947&nbsp; &nbsp; 0.3608930111&nbsp; &nbsp; 0.33877515790.4748001099&nbsp; &nbsp; 0.363986969&nbsp; &nbsp; &nbsp;0.37625288960.4625790119&nbsp; &nbsp; 0.3645150661&nbsp; &nbsp; 0.33359599110.5065748692&nbsp; &nbsp; 0.3570590019&nbsp; &nbsp; 0.33657503130.4803431034&nbsp; &nbsp; 0.4135499001&nbsp; &nbsp; 0.33303308490.4510772228&nbsp; &nbsp; 0.4421861172&nbsp; &nbsp; 0.3411760330.503674984&nbsp; &nbsp; &nbsp;0.3612480164&nbsp; &nbsp; 0.35617494580.5598649979&nbsp; &nbsp; 0.352314949&nbsp; &nbsp; &nbsp;0.37661790850.4573421478&nbsp; &nbsp; 0.3527538776&nbsp; &nbsp; 0.34734392170.4863037268&nbsp; &nbsp; 0.3742785454&nbsp; &nbsp; 0.3488383293底线是平均值。看起来第一种方法对于100万个整数来说要慢一些,但是我没有注意到答案中所述方法2的性能提高了3倍。事实证明,foreach循环是我而言最快的循环。我已经使用Xdebug完成了基准测试。编辑:距离答案最初发布已经有一段时间了。为了明确起见,基准测试是在php 5.6中完成的。

狐的传说

将此代码与闭包一起使用(在中引入PHP 5.3),它比接受的答案快一点,对我来说,将其强制转换为整数的意图更加清楚:// if you have your values in the format '1,2,3,4', use this before:// $stringArray = explode(',', '1,2,3,4');$stringArray = ['1', '2', '3', '4'];$intArray = array_map(&nbsp; &nbsp; function($value) { return (int)$value; },&nbsp; &nbsp; $stringArray);var_dump($intArray);输出将是:array(4) {&nbsp; [0]=>&nbsp; int(1)&nbsp; [1]=>&nbsp; int(2)&nbsp; [2]=>&nbsp; int(3)&nbsp; [3]=>&nbsp; int(4)}
打开App,查看更多内容
随时随地看视频慕课网APP