Как в PHP удалить из массива все нечисла
Как в PHP удалить из массива все элементы не являющиеся числами или числовыми строками.
Фильтрация массива
Чтобы удалить из массива элементы согласно заданного условия, в PHP используют функцию array_filter()
.
array_filter(array $array, ?callable $callback = null, int $mode = 0): array
PHP-функция array_filter
фильтрует элементы массива через callback-функцию (документация array-filter).
Для примера, в переменной $arr
возьмём следующий массив:
$arr = [4, '', 'test', '24', null, '12.54', 'dfg', 0, true, false, 8.4];
Числа и числовые строки
Если мы хотим удалить из массива все элементы не являющиеся числами или числовыми строками:
$new_arr = array_filter(
$arr,
function ($v) {
return is_numeric($v);
}
);
PHP-функция is_numeric()
проверяет, содержит ли переменная число или числовую строку (документация is_numeric).
В результате в переменной $new_arr
получим следующий массив:
Array
(
[0] => 4
[3] => "24"
[5] => "12.54"
[7] => 0
[10] => 8.4
)
Только целые числа
Если мы хотим отфильтровать элементы массива строго по типу данных, оставив в нём только те элементы которые являются целыми числами, тогда в callback-функции для проверки значений массива применяем PHP-функцию is_int()
:
$new_arr = array_filter(
$arr,
function ($v) {
return is_int($v);
}
);
PHP-функция is_int()
проверяет, представляет ли собой переменная целое число (документация is_int).
Теперь в результате в переменной $new_arr
мы получим следующий массив:
Array
(
[0] => 4
[7] => 0
)
Только числа с плавающей точкой
Для чисел с плавающей точкой берём PHP-функцию is_float()
:
$new_arr = array_filter(
$arr,
function ($v) {
return is_float($v);
}
);
PHP-функция is_float()
проверяет, представляет ли собой переменная число с плавающей точкой (документация is_int).
В данном случае, в результате в переменной $new_arr
мы получим:
Array
(
[10] => 8.4
)
Целые числа или числа с плавающей точкой
Если мы хотим оставить в массиве все числовые типы (целые числа и числа с плавающей точкой), исключив из него также и числовые строки, то в нашей проверке применим оператор ИЛИ ||
вместе с функциями is_int
и is_float
. То есть, сделаем такую проверку значений массива is_int($v) || is_float($v)
:
$new_arr = array_filter(
$arr,
function ($v) {
return is_int($v) || is_float($v);
}
);
В данном случае, в переменной $new_arr
получим следующий массив:
Array
(
[0] => 4
[7] => 0
[10] => 8.4
)
Перезаписать переменную
Если вы хотите отфильтровать массив в той же переменной где хранится массив, вы можете её просто перезаписать:
$arr = [4, '', 'test', '24', null, '12.54', 'dfg', 0, true, false, 8.4];
$arr = array_filter($arr, function ($v) { return is_numeric($v); });
*** Войдите чтобы писать комментарии.