将逗号分隔的整数转换为整数值?

16
假设我有一个字符串,如下所示:$thestring = "1,2,3,8,2"
如果我使用explode(',', $thestring),我会得到一个字符串数组。如何将其分解为整数数组?

你的字符串中是否只包含逗号和整数? - Deepu
@用户,请只输入整数和逗号,不要输入其他内容。 - Prof. Falken
1
请查看此帖子:https://dev59.com/j2kw5IYBdhLWcg3w2-XH - Andras Toth
@AndrasToth,没错,就是这样。 - Prof. Falken
6个回答

44

array_map也可以使用:

$s = "1,2,3,8,2";
$ints = array_map('intval', explode(',', $s ));
var_dump( $ints );

输出:

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

示例 codepad


12

是的,我注意到我错了,打算把它改回来。但我发现 PHP 文档很令人困惑,它说第一个参数应该是可调用的。 - Prof. Falken
2
@AmigableClarkKant,看链接,callable是第二个参数,第一个是数组。但无论如何,这是PHP中最大的问题之一。有些函数带下划线,有些不带。有些有一个顺序,其他则相反。很奇怪。 - Serge Kuharev
@Prof.Falken 嗯,我想你是在考虑 array_map 函数吧? - Mohammed Joraid
6
在 PHP 5.3 中,这个方法已经不再可用(请参见 http://php.net/manual/en/function.array-walk.php 的评论)。 可以使用 $data = array_map('intval',$data); 来代替。 - ParoX

1

大多数情况下你不需要这样做(PHP通常可以很好地处理字符串和浮点/整数的强制转换), 但如果绝对必要,你可以使用array_walkintvalfloatval:

$arr = explode(',','1,2,3'); 
// use floatval if you think you are going to have decimals
array_walk($arr,'intval'); 
print_r($arr);

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)

如果您需要更详细的说明,您也可以查看settype函数:
$arr = explode(",","1,2,3");
function fn(&$a){settype($a,"int");}
array_walk($f,"fn");
print_r($f);

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)

如果您正在尝试动态转换,这可能特别有用:

class Converter {
    public $type = 'int';
    public function cast(&$val){ settype($val, $this->type); }
}
$c = new Converter();

$arr = explode(",","1,2,3,0");
array_walk($arr,array($c, 'cast'));
print_r($arr);

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 0
)

// now using a bool
$c->type = 'bool';
$arr = explode(",","1,2,3,0");
array_walk($arr,array($c, 'cast'));
var_dump($arr); // using var_dump because the output is clearer.

array(4) {
  [0]=>
  bool(true)
  [1]=>
  bool(true)
  [2]=>
  bool(true)
  [3]=>
  bool(false)
}

0

由于$thestring是字符串,因此您将获得一个字符串数组。

只需在分裂值前面添加(int)。

或使用array_walk函数:

$arr = explode(',', $thestring);
array_walk($arr, 'intval');

对我不起作用,请查看此链接http://codepad.org/WwpN4J2x - Kathir

0
$thestring = "1,2,3,8,a,b,2";

$newArray = array();
$theArray = explode(",", $thestring);

print_r($theArray);

foreach ($theArray as $theData) {
  if (is_numeric($theData)) {
    $newArray[] = $theData;
  }
}

print_r($newArray);

// 输出

原始数组

Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 8 [4] => a [5] => b [6] => 2 )

只包含数字的数组

 Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 8 [4] => 2 ) 

0
$arr=explode(',', $thestring);
$newstr   = '';
foreach($arr as $key=>$val){
  $newstr .= $val; 
}

3
我认为它没有产生预期的结果,它将生成一个类似于“12382”的字符串。 - biziclop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接