循环遍历 FOR 语句

FOR 语句用来遍历集合对象,集合对象可以是数组、数据行或数据表。由于 PQL 本身的语言特点,在数据开发中循环用得非常少,好多工作都被 GET 语句代替了。不过在Voyager模板引擎中,由于要向页面上输出数据,会经常用到。

FOR-IN 循环

上例中会遍历从110,包含10。注意END LOOP后面必须有分号,表示 FOR 语句结束。上例仅是说明 FOR 语句的用法,实例开发中不建议用这种方式插入数据,用 GET 语句PUT 语句会提高性能。

FOR 语句遍历数组的其他示例(后面的示例都省略了LOOP后面的部分)。

上例后面两句是从数据源中查询结果,语句两端必须加括号。后一句因为变量字段只有一个$score,且第一列就是想要的结果,所以-> FIRST COLUMN可以省略掉。下面看一下遍历数据表的例子,一般数据表都是从数据源查询得来:

在遍历数据表时,可以理解为将数据表的每一行进行析构赋值(见 SET 语句),把每行每个字段位置对应的值赋值给循环变量。

最后看一下遍历数据行的例子。

特别注意,遍历数据行可以理解为把数据行转成一个两列的表格,这两列分别是数据行的字段名和字段值。上例中第一句,得到两次遍历,每一次遍历$key$value分别为nameTom,第二次遍历$key$value分别为age18

FOR-OF 循环

就像有 SET 语句也有 VAR 语句一样,FOR 语句除了FOR-IN循环外,还有FOR-OF循环。在遍历数组时,FOR-IN循环和FOR-OF循环结果一致,但在遍历数据行和数据表时有所不同。

FOR-OF 循环只能声明一个循环变量,这个变量在遍历数据行和数据表时,其数据类型是数据行。可以理解为循环变量没有经过析构赋值,将集合中的整个项赋给了循环变量(原理同 VAR 语句)。FOR-IN 遍历数据表时需要预先知道数据表中的列数,FOR-OF 循环在不知道数据表有多少列时或列非常多时非常有用。在循环体中,通过数据行类型点规则访问数据行某项的值,如$student.name$student.score。也可以通过UNDEFINED对是否包含某个字段进行判断,如IF $student.rate IS UNDEFINED THEN

循环变量的作用域

循环变量的值根据很一次循环都可能不同,其作用域仅限制在循环内部,循环体外面是访问不到的。循环退出后,循环变量即消失。如果定义的循环变量的变量名跟循环体外面的变量名一样时,则会在循环体内部访问不到外面同名变量的值,所以不建议将循环变量命名成与循环体外变量相同的名字。

循环的继续和中断

PQL提供了 EXIT 语句CONTINUE 语句用于中断和继续下一次循环,点击链接查看详细内容。


参考链接


微信公众号
码农老吴  |  星源工作室  |  开发月志  |  问题反馈
联系我们:wu@qross.io     手机/微信:18618171102
京 ICP 备 20027445 号
$(h1)!