preg_grep не возвращает правильные результаты - PullRequest
0 голосов
/ 06 сентября 2018

В результате следующий код не захватывает 45,00:

$array = array(50,45.00,34,56,6.67);
$fl_array = preg_grep("/^(\d+)?\.(\d)+$/", $array);

Есть предложения?

1 Ответ

0 голосов
/ 06 сентября 2018

Если вы сделаете var_dump($array);, вы получите:

array(5) {
  [0]=> int(50)
  [1]=> float(45)
  [2]=> int(34)
  [3]=> int(56)
  [4]=> float(6.67)
}

PHP вы преобразуете 45.00 в 45. Вот почему вы не можете найти с помощью регулярного выражения.

Что вы можете сделать, это вставить только строки.

$array = array("50","45.00","34","56","6.67");

Тогда это сработает.

Другой вариант - фильтровать только числа с плавающей точкой из массива:

$array = array(50,45.00,34,56,6.67);
$fl_array = array_filter($array, function($item) {
    return is_float($item);
});
...