以下代码:

$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而不是类型字符串。有没有更好的方法来做到这一点比循环通过数组与foreach和转换每个字符串为int?


当前回答

我很惊讶没有人提出filter_var方法,我不确定它在大型数据集上的表现如何,但如果你的关键是有效性高于性能,这里有一个例子:

$sampleString = '1,2 3, 4, 6, 5 , a';
$filteredValues = filter_var(
     explode(',', $sampleString),
     FILTER_VALIDATE_INT,
     FILTER_NULL_ON_FAILURE | FILTER_FORCE_ARRAY
);
array (size=6)
  0 => int 1
  1 => null
  2 => int 4
  3 => int 6
  4 => int 5
  5 => null

如你所见,2 3不是一个有效的数字,与a相同,被替换为null

要去除空值,可以应用array_filter

$filteredValues = array_filter($filteredValues);

这将产生以下结果:

array (size=4)
  0 => int 1
  2 => int 4
  3 => int 6
  4 => int 5

其他回答

你可以通过以下代码来实现这一点,

$integerIDs = array_map('intval', explode(',', $string));
<?php
    
$string = "1,2,3";
$ids = explode(',', $string );

array_walk( $ids, function ( &$id )
{
    $id = (int) $id;
});
var_dump( $ids );

这几乎比explosion (), array_map()和intval()快3倍:

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

我的解决方案是在回调函数的帮助下转换每个值:

$ids = array_map( function($value) { return (int)$value; }, $ids )

如果你有这样的数组:

$runners = ["1","2","3","4"];

如果你想把它们转换成整数并保持在数组中,下面应该做的工作:

$newArray = array_map( create_function('$value', 'return (int)$value;'),
            $runners);