Фильтрация массива строк в php

Итак, у меня есть следующий массив:

array:3 [
  0 => "6.05"
  1 => "5.94"
  2 => "5.96"
]

Что передается через следующую функцию:

$filteredShots = array_filter($shots, function($shot) {
        if (is_numeric($shot)) {
            return floatval($shot);
        }
});

Что потом выплевывает точно такой же массив:

array:3 [
  0 => "6.05"
  1 => "5.94"
  2 => "5.96"
]

Почему эти струны? Я сказал преобразовать их в floatval Я что-то не так делаю? Я сумасшедший?

Если я умру и сделаю дамп в операторе return, я получу: 6,05, а не «6,05», так что ... почему массив это отражает?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
281
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

array_filter ожидает от функции обратного вызова true или false, чтобы сохранить или удалить соответствующий элемент. В вашей реализации, если у вас нет значения 0 или falsey, он всегда будет возвращать true. Вам нужен array_map, который фактически применяет возврат обратного вызова:

$filteredShots = array_map(function($shot) {
        if (is_numeric($shot)) {
            return floatval($shot);
        }
}, $shots);

Вы также можете изменить исходный массив с помощью array_walk:

array_walk($shots, function(&$shot) {
        if (is_numeric($shot)) {
            $shot = floatval($shot);
        }
});

Вы можете использовать array_filter для удаления нечисловых:

$filteredShots = array_filter($shots, function($shot) {
        return is_numeric($shot) ? true : false;
});
//or simply
$filteredShots = array_filter($shots, 'is_numeric');

Я могу принять это за 8 минут, я всегда не понимаю, для чего подходит фильтр массива и для чего подходит карта массива. Спасибо, что прояснили это :)

TheWebs 11.07.2018 20:13

@TheWebs Для этого и предназначена документация, хотя названия функций, кажется, довольно ясно описывают то, что они делают. Фильтрация означает сокращение коллекции до элементов, соответствующих некоторым критериям.

Barmar 11.07.2018 20:42

Другие вопросы по теме