Иллюстрированный самоучитель по PostgreSQL

Циклы

Тег <for> предназначен для многократного выполнения блоков LXP. При вызове он всегда получает обязательный атрибут start, а также один из атрибутов end и endbefore. Всем атрибутам должны быть присвоены числовые значения.

Атрибут start инициализирует целочисленный счетчик цикла, который увеличивается на 1 при каждой последующей итерации. Если в теге определен атрибут end, цикл прекращается после достижения числа, указанного в этом атрибуте. Если же определен атрибут endbefore, цикл прекращается на одну итерацию раньше. Таким образом, атрибуты end и endbefore в этом отношении функционально эквивалентны операторам <= и < таких языков программирования, как РНР и С.

В процессе перебора специальный объект LXP с именем for содержит переменную count, в которой хранится текущее значение счетчика цикла. В листинге 13.19 приведен пример простого цикла for с изменением счетчика в интервале от 1 до 5.

Листинг 13.19. Простой цикл <for>.

<lхр>
<for start="1" end="5">
Iterating loop: <putvar name="for.count" /><br />
</fon>
</lxp>

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

Iterating loop: 1<br />
Iterating loop: 2<br />
Iterating loop: 3<br />
Iterating loop: 4<br />
Iterating loop: 5<br />

Цикл for оказывает неоценимую помощь при работе с массивами, элементы которых требуется вернуть средствами LXP. Как упоминалось ранее, если при определении после имени переменной следуют квадратные скобки ([ ]), LXP автоматически создает массив значений, связанных с этим именем, при этом каждый элемент массива определяется целочисленным индексом. LXP также создает объектную переменную с тем же именем, но без квадратных скобок, с двумя переменными size и last. Переменная size (например, my_array.size) содержит количество элементов в массиве, а переменная last (например, my_array.last) – индекс последнего элемента.

В листинге 13.20 продемонстрирован вывод элементов массива my_array[].

Листинг 13.20. Вывод элементов массива в цикле <for>.

<lхр>
<for start="0" end="@my_array.last">
Here is the value of my_array .at offset <putvar name="for.count" />:
<putvar name="my_array[@for.count]" />
<br />
</for>
</lxp>

Обратите внимание: знак @ используется с объектом my_array только в том случае, когда нужно получить значение переменной, а не ее имя. В теге <putvar> он отсутствует, поскольку атрибут name должен содержать имя переменной, а не ее значение.

Внимание
Вместо автоматического создания массива (в виде my_array[]) можно присваивать индексы элементов вручную (например, my_array[0], my_array[1]), но в этом случае LXP не устанавливает значения переменных size и last
.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.