Как сохранить только числовые числа из строки в массив int в PHP - PullRequest
0 голосов
/ 09 июня 2018

в моей переменной POST у меня есть: print_r($_POST["partecipanti"]); Отображает ["1", "2"]

Я хочу сохранить только числа переменной post в массиве int.Я пытался

$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 голосов
/ 09 июня 2018

для фильтрации целочисленных значений из массива используйте array_filter

$arr = array_filter($_POST["participanti"], function($v) { return is_int($v); });

Если вы хотите преобразовать значения массива в целые числа:

$arr = array_map(function($v) { return (int)$v; }, $_POST["participanti"]);

Inв обоих случаях $ arr содержит только целые значения.

0 голосов
/ 09 июня 2018

Предполагая, что $_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);

Demo

В результате:

array(5) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(2)
  [3]=>
  int(-8)
  [4]=>
  int(9223372036854775807)
}
0 голосов
/ 09 июня 2018

preg_match_all каждый раз возвращает новый многомерный массив.Но вы можете просто «вытолкнуть» массив:

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

Возвращает:

Array (
  [0] => 1
  [1] => 2
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...