Самоучитель по SQL-сервер в Linux



Циклы

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

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

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

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

<1хр>

<for start="l" end="5">

Iterating loop: <putvar name="for.count" /><br />

</fon>

</lxp>

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

Iterating loop: l<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) содержит количество элементов в массиве, а переменная 1 ast (например, my_array. 1 ast) — индекс последнего элемента.

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

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

<1хр>

<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[l]), но в этом случае LXP не устанавливает значения переменных size и last.