如何在PHP

时间:2018-06-09 08:52:57

标签: php arrays string

在我的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
     )

希望我解释好,谢谢所有提前

3 个答案:

答案 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]来获取该数组。

12外,您的正则表达式-?\d+(?:\.\d+)?+也匹配,例如-8.4499999999999999999999999999

如果你想要一个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);

Demo

结果是:

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