Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4157850
  • 博文数量: 601
  • 博客积分: 15410
  • 博客等级: 上将
  • 技术积分: 6884
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-16 08:11
个人简介

独学而无友,则孤陋而寡闻!

文章分类

全部博文(601)

文章存档

2020年(1)

2018年(4)

2017年(7)

2016年(42)

2015年(25)

2014年(15)

2013年(36)

2012年(46)

2011年(117)

2010年(148)

2009年(82)

2008年(37)

2007年(41)

分类: PHP

2014-02-24 10:16:16

要求:
  用php输出一个数组,物理输出其中的一个元素。
  数组名:$arr,内容:'abc','bcd','cde'

方案:
    out.tpl
  1. This is a test File
  2.   {{ BEGIN name }} {{ $xm }} ssss
  3. {{ END }}

  4.   This is The

  out.php

  1. <?php

  2. $tp = new Blitz('./out.tpl');
  3. $tp->display(array(
  4.                     'name'=>array(
  5.                                 array('xm'=>'abc'),
  6.                                 array('xm'=>'bcd'),
  7.                                 array('xm'=>'cde')
  8.               )));

  9. ?>

问题:
   本来感觉应该直接输出$arr=array('abc','bcd','cde')就可以了,为什么弄出来一个三维数组呢?

分析:
   先来看著名的smarty是怎么做的呢?

tpl文件:

  1. {$abc}<br>
  2.      {section name=test loop=$arr}
  3. <p>The number is {$arr[test]} ! </p>
  4.       {/section}
php文件:

点击(此处)折叠或打开

  1. for( $i=0; $i < 50; $i++ ) {
  2.   $arr[] = $i;
  3. }
     首先要告诉模板,要循环的这个变量名是什么,在上例中,变量名叫arr,然后还要告诉模板,对哪些量进行循环,smarty只是把整个数组进行循环,不管数组key是什么。所以只要有一维数组就够了。

  而blitz则不然,它要了解两件事情才开始循环:(1)循环的变量名,在blitz中叫做block;(2)对哪些key,也就是索引进行循环。
  看起来有些复杂,但是这个思维却比较容易地解决了一个问题:在循环的内容也是一个数组的情况。

  对于smarty,二维数组就显得有点复杂了,要用句号“.”来进行下一级变量的引用,但这对于blitz来说,跟一维的数组一样,不需要添加成本,简单地加个同级的key就行了。

  并且这样做还有一个好处,就是如果遇到需要判断一个条件的时候,可以添加一个新的key值来进行判断。


问题:
    Blitz最大的短板在于不能按条件进行判断,比如if ($num=5),这种判断目前还不能实现,不过作者表态,已经考虑添加简单的运算支持。


总结:用blitz,就要习惯它的三维数组,不过不用担心,四维好像也用不上。



提示:
  在传递给blitz的数组中,第一维的元素个数,决定了“整篇文档”的重复次数。如下所示,你认为最终应该输出什么呢?
tpl:

点击(此处)折叠或打开

  1. This is a test File
  2.   {{ BEGIN test }} {{ $id }} : id
  3.   {{ END test }}
  4.   {{ BEGIN name }} {{ $xm }} ssss
  5.   {{ END name }}

  6.   This is The
php,注意给blitz的是两个元素的数组:

点击(此处)折叠或打开

  1. <?php
  2. $tp = new Blitz('./test.tpl');

  3. $arr[]= array('name'=>array(array('xm'=>'abc'),array('xm'=>'bcd'),array('xm'=>'cde'))) ;
  4. $arr[]= array('test'=>array(array('id'=>1),array('id'=>2),array('id'=>3))) ;
  5. $tp->set($arr);

  6. $tp->display();
  7. ?>
运行结果是:

点击(此处)折叠或打开

  1. This is a test File
  2.   abc ssss
  3.   bcd ssss
  4.   cde ssss

  5. This is The
  6. This is a test File
  7.   1 : id
  8.   2 : id
  9.   3 : id

  10. This is The

把php文件稍加改进,就变成别外一个结果了,注意添加了$arr[0],强制两个数组变为一维中的一个元素:

  1. <?php
  2.     $tp = new Blitz('./test.tpl');
  3.     $arr[0]['name']= array(array('xm'=>'abc'),array('xm'=>'bcd'),array('xm'=>'cde')) ;
  4.     $arr[0]['test']= array(array('id'=>1),array('id'=>2),array('id'=>3)) ;
  5.     $tp->set($arr);
  6.     $tp->display();
  7. ?>

  1. This is a test File
  2.   1 : id
  3.   2 : id
  4.   3 : id
  5.   abc ssss
  6.   bcd ssss
  7.   cde ssss

  8. This is The





--end--






阅读(1689) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~