如何在PHP中将字符串中的数字保存到int数组中

如何在PHP中将字符串中的数字保存到int数组中,php,arrays,string,Php,Arrays,String,在我的POST变量中,我有:print_r($_POST[“partecipanti”]) 它显示 [“1”、“2”] 我只想将post变量的数字保存在int数组中。我试过了 $array = array(); preg_match_all('/-?\d+(?:\.\d+)?+/', $_POST["partecipanti"], $array); 但是print\r($array)返回 我怎么能有这样一个变量 Array ( [0] => 1 [1] => 2

在我的POST变量中,我有:
print_r($_POST[“partecipanti”])
它显示
[“1”、“2”]

我只想将post变量的数字保存在int数组中。我试过了

$array = array();
 preg_match_all('/-?\d+(?:\.\d+)?+/', $_POST["partecipanti"], $array);
但是print\r($array)返回

我怎么能有这样一个变量

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

希望我解释得很好,提前谢谢大家

preg\u match\u all
每次都返回一个新的多维数组。但您可以直接“弹出”阵列:

$array = array();
preg_match_all('/-?\d+(?:\.\d+)?+/', $_POST["partecipanti"], $array);
$array = $array[0];
返回:

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

要从数组中筛选整数值,请使用

如果要将数组值转换为整数:

$arr = array_map(function($v) { return (int)$v; }, $_POST["participanti"]);
在这两种情况下,$arr只包含整数值。

假设
$\u POST[“partecipanti”])
是一个字符串,因为您在示例中直接使用它,它的第二个参数是字符串


preg_match_all
返回一个数组,其中匹配项位于第一个条目中,并包含字符串数组。您可以使用
$array[0]
获得该数组

除了
1
2
,您的正则表达式还匹配,例如
-8.44
99999999999999

如果您想要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)
}

php中只有数字的字符串和整数之间没有区别。但如果必须的话,可以使用intval()将其转换为整数。@Andreas当然可以,php中的数字字符串和整数是有区别的。试试
is_int(“1”)
它返回
false
print\r($array[0])
,我想
$\u POST[“partecipanti”]
是一个json字符串,可以解码。@WizardNx不确定你想说什么$_POST始终采用字符串格式。在一个明显的字符串上使用is_int()是毫无意义的。@Andreas它实际上毫无意义是的,但是你说“在php中只有数字的字符串和整数之间没有区别”,这是错误的,或者像我想说的那样:“像is_int(“1”)一样真实”。请注意,在
preg\u match\u all
之前,不需要声明
$array
。我肯定他是在寻求一种只从数组中获取整数值的方法。不将数组值转换为整数。这是筛选而不是转换,转换需要不同的方法。编辑答案以涵盖筛选和转换。
$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)
}