以下代码:
$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?
当前回答
在Mark的解决方案中,如果您试图解析“test”之类的字符串,则将返回数组([0]=> int 0)。
$integerIDs = array_map( 'intval', array_filter( explode(',', $string), 'is_numeric' ) );
其他回答
另一种技术是在分解字符串后将传入值类型提示(强制)为int类型。
请注意,除非您将php设置为使用严格类型,否则这些技术将像我的演示链接中演示的那样工作。
以下技术不应用于清除非数字字符串;它假定所有的值都是数值。
如果将浮点值传递到这些技术中,它们将被截断/降为整数。
代码:(演示)
$string = "1,2,3";
$array = explode(',', $string);
var_dump($array);
echo "\n---\n";
array_walk($array, function(int &$int){;});
var_dump($array);
echo "\n---\n";
var_dump(
array_map(function(int $i){ return $i; }, explode(',', $string))
);
echo "\n---\n";
var_dump(
array_map(fn(int $i) => $i, explode(',', $string)) // PHP 7.4 arrow function syntax
);
输出:
array(3) {
[0]=> string(1) "1"
[1]=> string(1) "2"
[2]=> string(1) "3"
}
---
array(3) {
[0]=> int(1)
[1]=> int(2)
[2]=> int(3)
}
---
array(3) {
[0]=> int(1)
[1]=> int(2)
[2]=> int(3)
}
---
array(3) {
[0]=> int(1)
[1]=> int(2)
[2]=> int(3)
}
我的解决方案是在回调函数的帮助下转换每个值:
$ids = array_map( function($value) { return (int)$value; }, $ids )
保持简单……
$intArray = array ();
$strArray = explode(',', $string);
foreach ($strArray as $value)
$intArray [] = intval ($value);
你为什么要另辟蹊径?循环毫无痛苦地完成了这项工作。如果您关心的是性能,那么可以使用json_decode()。人们已经发布了如何使用它,所以我在这里不包括它。
注意:当使用==操作符而不是===时,如果字符串值构成了一个没有引号的有效数字,则会自动转换为数字(例如整数或双精度)。例如:
$str = '1';
($str == 1) // true but
($str === 1) //false
因此,==可以解决你的问题,是有效的,但如果你在比较中使用===就会崩溃。
$arr = ["adfsf", "*&^%$#^", "23", "25", "29"];
function convertArrayStringToArrayInt($arr)
{
$result = [];
foreach($arr as $value) {
if ((int)$value !== 0) {
$result[] = (int)$value;
}
}
return $result;
}
$result = convertArrayStringToArrayInt($arr);
var_dump($result);
结果是这样的
array(3) {
[0]=> int(23)
[1]=> int(25)
[2]=> int(29)
}
<?php
$string = "1,2,3";
$ids = explode(',', $string );
array_walk( $ids, function ( &$id )
{
$id = (int) $id;
});
var_dump( $ids );