Reg.ru: домены и хостинг

Крупнейший регистратор и хостинг-провайдер в России.

Более 2 миллионов доменных имен на обслуживании.

Продвижение, почта для домена, решения для бизнеса.

Более 700 тыс. клиентов по всему миру уже сделали свой выбор.

Перейти на сайт->

Бесплатный Курс "Практика HTML5 и CSS3"

Освойте бесплатно пошаговый видеокурс

по основам адаптивной верстки

на HTML5 и CSS3 с полного нуля.

Начать->

Фреймворк Bootstrap: быстрая адаптивная вёрстка

Пошаговый видеокурс по основам адаптивной верстки в фреймворке Bootstrap.

Научитесь верстать просто, быстро и качественно, используя мощный и практичный инструмент.

Верстайте на заказ и получайте деньги.

Получить в подарок->

Бесплатный курс "Сайт на WordPress"

Хотите освоить CMS WordPress?

Получите уроки по дизайну и верстке сайта на WordPress.

Научитесь работать с темами и нарезать макет.

Бесплатный видеокурс по рисованию дизайна сайта, его верстке и установке на CMS WordPress!

Получить в подарок->

*Наведите курсор мыши для приостановки прокрутки.


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

В этой заметке разберемся с тем, как управляться с последовательностями целых чисел в 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 классных сервисов, программ и сайтов для веб-разработчиков

Наверх