在我的POST变量中我有:print_r($_POST["partecipanti"]);
它显示
[“1”,“2”]
我想只在int数组中保存post变量的数字。我试过了
$array = array();
preg_match_all('/-?\d+(?:\.\d+)?+/', $_POST["partecipanti"], $array);
但是print_r($ array)返回
Array (
[0] => Array (
[0] => 1
[1] => 2
)
)
我怎样才能拥有像
这样的变量Array (
[0] => 1
[1] => 2
)
希望我解释好,谢谢所有提前
答案 0 :(得分:1)
preg_match_all
每次都返回一个新的多维数组。但你可以只是" pop"数组:
$array = array();
preg_match_all('/-?\d+(?:\.\d+)?+/', $_POST["partecipanti"], $array);
$array = $array[0];
返回:
Array (
[0] => 1
[1] => 2
)
答案 1 :(得分:0)
要从数组中过滤整数值,请使用array_filter
$arr = array_filter($_POST["participanti"], function($v) { return is_int($v); });
如果您想将数组值转换为整数:
$arr = array_map(function($v) { return (int)$v; }, $_POST["participanti"]);
在这两种情况下,$ arr只包含整数值。
答案 2 :(得分:0)
假设$_POST["partecipanti"])
是一个字符串,因为您在示例中直接使用它,而preg_match_all的第二个参数是一个字符串。
preg_match_all
返回一个数组,其中匹配项位于第一个条目中,并包含字符串数组。您可以使用$array[0]
来获取该数组。
除1
和2
外,您的正则表达式-?\d+(?:\.\d+)?+
也匹配,例如-8.44
或99999999999999999999999999
。
如果你想要一个int数组,你可以使用array_map作为回调函数intval。
注意 int的最大尺寸以及值的四舍五入。
例如:
$str = "test 1, test 2, test 2.3 and -8.44 plus 99999999999999999999999999999999999999999999999999";
preg_match_all('/-?\d+(?:\.\d+)?/', $str, $array);
$array = array_map/**/("intval", $array[0]);
var_dump($array);
结果是:
array(5) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(2)
[3]=>
int(-8)
[4]=>
int(9223372036854775807)
}