以下代码:

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


当前回答

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

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

其他回答

使用这个代码和一个闭包(在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)
}

如果你有这样的数组:

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

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

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

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

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

另一种更短的方法是:

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

其性能与方法3相同。

保持简单……

$intArray = array ();
$strArray = explode(',', $string);
foreach ($strArray as $value)
$intArray [] = intval ($value);

你为什么要另辟蹊径?循环毫无痛苦地完成了这项工作。如果您关心的是性能,那么可以使用json_decode()。人们已经发布了如何使用它,所以我在这里不包括它。

注意:当使用==操作符而不是===时,如果字符串值构成了一个没有引号的有效数字,则会自动转换为数字(例如整数或双精度)。例如:

$str = '1';
($str == 1) // true but
($str === 1) //false

因此,==可以解决你的问题,是有效的,但如果你在比较中使用===就会崩溃。