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

Работа с последовательностями целых чисел

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

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

Начнем мы с простейшего цикла for и завершим чем-то гораздо более интересным и функциональным.

Итак, как наша задача решается с помощью цикла for?


$start = 3;
$end = 7;

for ($i = $start; $i <= $end; $i++)
{
    printf("%d в квадрате равно %d<br>", $i, $i * $i);
}

Понятно, что в качестве приращения можно использовать не только 1, например:


$start = 3;
$end = 7;

for ($i = $start; $i <= $end; $i += 2)
{
    printf("%d в квадрате равно %d<br>", $i, $i * $i);
}

Используя конструкцию "+= 2" мы говорим интерпретатору о том, что к текущему числу нужно прибавить значение 2.

В случае, если нам нужно сохранить числа для использования, помимо перебора нужно использовать метод range():


$numbers = range(3, 7);

foreach ($numbers as $n)
{
    printf("%d в квадрате равно %d<br>", $n, $n * $n);
}

foreach ($numbers as $n)
{
    printf("%d в кубе равно %d<br>", $n, $n * $n * $n);
}

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

Практически в любых ситуациях, где мы имеем дело с массивами данных или некими последовательностями, мы столкнемся и с разного рода циклами.

В частности, цикл for использует один целочисленный счетчик, а произвольный выбор приращения (как в сторону увеличения, так и в сторону уменьшения), позволяет лучше контролировать ход выполнения цикла. Более того, значение счетчика можно изменять и внутри цикла.

В последнем примере функция range() возвращает массив значений от $start до $end. Преимуществом range() является лаконичность, однако не обошлось и без недостатков - большой массив может занимать много лишней памяти (а ведь память, как мы знаем, лишней не бывает:)).

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

Например, вызов range(1,10,2) возвратит массив с элементами 1, 3, 5, 7, 9.

Обратите внимание, что значение $start, т.е. первый аргумент может быть больше значения $end (второго аргумента). В этом случае происходит вполне логичная вещь: числа, возвращаемые функцией range(), упорядочиваются по убыванию.

Еще одно из применений функции range - генерация символьных последовательностей.

Если мы пропишем такой код:


print_r(range('l', 'p'));

то на выходе получим массив:


Array
(
    [0] => l
    [1] => m
    [2] => n
    [3] => o
    [4] => p
)

При этом нужно учесть, что символьные последовательности, сгенерированные функцией range(),состоят из байтов ASCII, поэтому с многобайтовыми символами Юникода функция работать не будет.

Следующим момент. Начиная с PHP 5.5 для работы с сериями можно использовать так называемые генераторы. Это функции, которые вместо вызова return для возвращения значения вызывают yield (возможно, в цикле).

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


function squares($start, $stop)
{
    if ($start < $stop)
    {
        for ($i = $start; $i <= $stop; $i++)
        {
            yield $i => $i * $i;
        }
    }

    else
    {
        for ($i = $stop; $i >= $start; $i--)
        {
            yield $i => $i * $i;
        }
    }
}

foreach (squares(3, 15) as $n => $square)
{
    printf("%d в квадрате равно %d<br>", $n, $square);
}

Смысл в том, что PHP продолжает вызывать функцию squares() до тех пор, пока та вызывает yield. Ключ и значение, передаваемое yield, могут использоваться в цикле foreach, как обычный элемент массива.

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

Кроме того, нам не нужно резервировать память для предварительного создания всего массива, как в случае с range(), прежде чем начать работать с ним.

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Наверх