SYNOPSIS<LOOP [SKIP=s] [MAX=m] [REV] $var1 ...>
... statements ...
</LOOP>
DESCRIPTION
The LOOP
statement iterates through the values of the given
variables, executing the given statements each time. Inside the
LOOP
, any reference to a LOOP
variable returns the
current value of the variable, instead of the first (0th) value: in the
nth loop iteration, the nth value of each variable is used. The
loop continues until the last value of the variable with the most
values is iterated, or MAX
iterations have occurred. MAX
is optional; its argument is an integer literal or variable.
If SKIP
is given, then the first s values of the variables
are skipped; i.e. iteration (and the value of $loop
,
unlike with other looping statements) starts with the sth value
instead of the 0th.
Inside the LOOP
, the special variable $loop
is set at
the start of each iteration to the current index (starting from 0,
plus SKIP
) into the loop variables. When the LOOP
finishes (via </loop>
), $loop
is set to the number of
iterations (plus SKIP
). This provides an easy way to enumerate
or count values inside the LOOP
.
The variable $next
is set to the "next" loop value each
iteration. Inside the loop, this is $loop
+ 1: an easy way to
count values starting from 1 instead of 0. When the LOOP
finishes (via </loop>
), $next
is equal to $loop
:
it is the value to use for SKIP
in a new LOOP
to
continue iteration at the next value.
If the REV
flag is given, then the variables are iterated
in reverse order, from last to first values. However the values
of $loop
and $next
are still incremented forwards.
If a BREAK
statement is encountered inside the loop, the
LOOP
is exited at that point, as if none of the variables had
any further values. The $loop
and $next
variables,
however, will have whatever values they had at that point; they will
not be set by </loop>
.
The single-value nature of iterated variables applies globally. If
a function is called from within a LOOP
, references to the
current LOOP
's variables (if global) still return just the
single current value. Variables not listed in the current LOOP
tag, however, still return all their values inside a LOOP
.
Modifying a LOOP
variable inside the loop will only change
the current value of the variable; see
Variable Assignment (here). This can happen not
only with an explicit variable assignment, but indirectly if a
function or statement is called that sets $ret
, for example.
Thus LOOP
ing over $ret
is generally not advised,
as nearly any function called inside the loop will attempt to
modify $ret
- possibly losing type information and/or
values. This is also true of other statements in Vortex that
put variables in a loop, such as SQL
. Use the texis.ini
setting [Texis] Warn Ret Loop or the --warn-ret-loop
command-line option (here) to
warn when such code is compiled.
EXAMPLE
This example generates radio buttons for a list of colors
(essentially the <radiobutton>
function):
<$colors = Red Orange Yellow Green Blue Violet>
<$rgb = FF0000 FFA500 FFFF00 00FF00 0000FF EE82EE>
<LOOP $colors $rgb>
<input type="radio" name="rgb" value="$rgb"/> $colors
</LOOP>
CAVEATS
The REV
flag was added in version 3.0.947100000 20000105.
LOOP
s can be nested; however the same LOOP
variable
should not be used in an inner LOOP
since it is already a
single value.
The values of "short" LOOP
variables, i.e. ones with fewer
values than others in the same LOOP
, appear as empty when
iterated past their end.