以下代码:

$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?


当前回答

使用这个代码和一个闭包(在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(
    function($value) { return (int)$value; },
    $stringArray
);

var_dump($intArray);

输出将是:

array(4) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  int(4)
}

其他回答

在Mark的解决方案中,如果您试图解析“test”之类的字符串,则将返回数组([0]=> int 0)。

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

如果你有这样的数组:

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

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

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

不确定这是否更快,但翻转数组两次会将数值字符串转换为整数:

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

重要提示:如果您正在处理重复的值,请不要使用此选项!

如果您有一个多维数组,前面提到的解决方案都不起作用。以下是我的解决方案:

public function arrayValuesToInt(&$array){
  if(is_array($array)){
    foreach($array as &$arrayPiece){
      arrayValuesToInt($arrayPiece);
    }
  }else{
    $array = intval($array);
  }
}

然后,就这样做:

arrayValuesToInt($multiDimentionalArray);

这将生成一个这样的数组:

[["1","2"]["3","4"]]

是这样的:

[[1,2][3,4]]

这适用于任何深度。

或者,你可以使用array_walk_recursive()来得到一个更简短的答案:

array_walk_recursive($array, function(&$value){
    $value = intval($value);
});

另一种更短的方法是:

$r = explode(',', $s);
foreach ($r as &$i) $i = (int) $i;

其性能与方法3相同。