• Сервис онлайн-записи на собственном Telegram-боте
    Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание, но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
    Для новых пользователей первый месяц бесплатно.
    Чат-бот для мастеров и специалистов, который упрощает ведение записей:
    Сам записывает клиентов и напоминает им о визите;
    Персонализирует скидки, чаевые, кэшбэк и предоплаты;
    Увеличивает доходимость и помогает больше зарабатывать;
    Начать пользоваться сервисом
  • Как продвинуть сайт на первые места?
    Вы создали или только планируете создать свой сайт, но не знаете, как продвигать? Продвижение сайта – это не просто процесс, а целый комплекс мероприятий, направленных на увеличение его посещаемости и повышение его позиций в поисковых системах.
    Ускорение продвижения
    Если вам трудно попасть на первые места в поиске самостоятельно, попробуйте технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Если ни один запрос у вас не продвинется в Топ10 за месяц, то в SeoHammer за бустер вернут деньги.
    Начать продвижение сайта

Применение функции к каждому элементу массива

Одна из частых задач, с которой приходится сталкиваться при работе с массивами данных - это ситуация, когда необходимо с каждым элементом массива выполнить некое действие или прогнать его через какую-либо функцию.

Иными словами, нам нужно произвести определенное преобразование для всего набора данных.

На помощь нам спешит функция под названием array_walk():


$names = array('firstname' => "Baba",
               'lastname'  => "O'Riley");

array_walk($names, function (&$value, $key)
{
    $value = htmlentities($value, ENT_QUOTES);
});

foreach ($names as $name)
{
    print "$name<br>";
}

На выходе получим:


Baba
O'Riley

Все хорошо, когда мы имеем дело с простыми массивами, но как быть, если у нас есть вложенные данные?

Для этого случая есть столь же удобная функция array_walk_recursive():


$names = array('firstnames' => array("Baba", "Bill"),
               'lastnames'  => array("O'Riley", "O'Reilly"));

array_walk_recursive($names, function (&$value, $key)
{
    $value = htmlentities($value, ENT_QUOTES);
});

foreach ($names as $nametypes)
{
    foreach ($nametypes as $name)
	{
        print "$name<br>";
    }
}

Результатом работы этого кода будет вывод на экран следующих данных:


Baba
Bill
O'Riley
O'Reilly

Детали

Очень часто для перебора элементов массива используются циклы. Один из основных вариантов - это цикл foreach.

Но, помимо него, можно воспользоваться функцией и функцией array_walk(), пример работы которой вы видели чуть выше.

Данная функция принимает массив и анонимную функцию обратного вызова, которая и занимается обработкой всех элементов массива.

Функция обратного вызова получает два параметра: значение и ключ. Кроме того, для нее предусмотрен и необязательный третий параметр с дополнительными данными, которые могут использоваться в этой же самой функции.

Пример ниже обеспечивает кодирование всех данных в массиве $names по правилам HTML.

Анонимная функция обратного вызова получает значения из массива, передает их функции htmlentities() для кодирования ключевых сущностей HTML и заносит результат в переменную $value:


$names = array('firstname' => "Baba",
               'lastname'  => "O'Riley");

array_walk($names, function (&$value, $key)
{
    $value = htmlentities($value, ENT_QUOTES);
});

foreach ($names as $name)
{
    print "$name\n";
}

Результат:


Baba
O'Riley

Функция array_walk() работает «по месту», т.е. не возвращает измененную копию массива. Что это значит для нас? Это значит, что если нам нужно на самом деле изменить элементы массива, то значения должны передаваться по ссылке.

В таких случаях, как в приведенном примере, перед именем параметра ставится символ &. Тем не менее это необходимо только тогда, когда вы хотите изменить массив - в противном случае амперсанд не используется.

Второй вариант - это работа с набором вложенных массивов. Здесь нам на выручку приходит функция array_walk_recursive():


$names = array('firstnames' => array("Baba", "Bill"),
               'lastnames'  => array("O'Riley", "O'Reilly"));

array_walk_recursive($names, function (&$value, $key)
{
    $value = htmlentities($value, ENT_QUOTES);
});

foreach ($names as $nametypes)
{
    foreach ($nametypes as $name)
	{
        print "$name\n";
    }
}

Результат будет следующий:


Baba
Bill
O'Riley
O'Reilly

При этом нужно помнить, что функция array_walk_recursive() передает функции обратного вызова только элементы, не являющиеся массивами, так что нам не придется изменять функцию обратного вызова при переходе с array_walk().

Понравился материал и хотите отблагодарить?
Просто поделитесь с друзьями и коллегами!


Смотрите также:

PHP: Получение информации об объекте или классе, методах, свойствах и наследовании

PHP: Получение информации об объекте или классе, методах, свойствах и наследовании

CodeIgniter: жив или мертв?

CodeIgniter: жив или мертв?

Функции обратного вызова, анонимные функции и механизм замыканий

Функции обратного вызова, анонимные функции и механизм замыканий

Слияние массивов. Преобразование массива в строку

Слияние массивов. Преобразование массива в строку

Деструктор и копирование объектов с помощью метода __clone()

Деструктор и копирование объектов с помощью метода __clone()

Эволюция веб-разработчика или Почему фреймворк - это хорошо?

Эволюция веб-разработчика или Почему фреймворк - это хорошо?

Магические методы в PHP или методы-перехватчики (сеттеры, геттеры и др.)

Магические методы в PHP или методы-перехватчики (сеттеры, геттеры и др.)

PHP: Удаление элементов массива

PHP: Удаление элементов массива

Ключевое слово final (завершенные классы и методы в PHP)

Ключевое слово final (завершенные классы и методы в PHP)

50 классных сервисов, программ и сайтов для веб-разработчиков

50 классных сервисов, программ и сайтов для веб-разработчиков

Наверх