以下代码:
$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?
以下代码:
$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?
当前回答
另一种更短的方法是:
$r = explode(',', $s);
foreach ($r as &$i) $i = (int) $i;
其性能与方法3相同。
其他回答
<?php
$string = "1,2,3";
$ids = explode(',', $string );
array_walk( $ids, function ( &$id )
{
$id = (int) $id;
});
var_dump( $ids );
不确定这是否更快,但翻转数组两次会将数值字符串转换为整数:
$string = "1,2,3,bla";
$ids = array_flip(array_flip(explode(',', $string)));
var_dump($ids);
重要提示:如果您正在处理重复的值,请不要使用此选项!
你可以通过以下代码来实现这一点,
$integerIDs = array_map('intval', explode(',', $string));
Input => '["3","6","16","120"]'
类型转换我使用=> (int)$s;
function Str_Int_Arr($data){
$h=[];
$arr=substr($data,1,-1);
//$exp=str_replace( ",","", $arr);
$exp=str_replace( "\"","", $arr);
$s='';
$m=0;
foreach (str_split($exp) as $k){
if('0'<= $k && '9'>$k || $k =","){
if('0' <= $k && '9' > $k){
$s.=$k;
$h[$m]=(int)$s;
}else{
$s="";
$m+=1;
}
}
}
return $h;
}
var_dump(Str_Int_Arr('["3","6","16","120"]'));
输出:
array(4) {
[0]=>
int(3)
[1]=>
int(6)
[2]=>
int(16)
[3]=>
int(120)
}
谢谢
保持简单……
$intArray = array ();
$strArray = explode(',', $string);
foreach ($strArray as $value)
$intArray [] = intval ($value);
你为什么要另辟蹊径?循环毫无痛苦地完成了这项工作。如果您关心的是性能,那么可以使用json_decode()。人们已经发布了如何使用它,所以我在这里不包括它。
注意:当使用==操作符而不是===时,如果字符串值构成了一个没有引号的有效数字,则会自动转换为数字(例如整数或双精度)。例如:
$str = '1';
($str == 1) // true but
($str === 1) //false
因此,==可以解决你的问题,是有效的,但如果你在比较中使用===就会崩溃。