记得刚开始写代码的时候,看到动态输出ul,table就头晕;
因为当时对HTML标签,制表符,PHP字符串,单引号/双引号的操作还很不熟练
几个项目后,再看这些代码,就有了很亲切的感觉
虽然用框架后都直接用封装好的控件输出,但是原生态的总是那么有魅力,让人细细品味
本文总结2个例子,一个无序列表的动态输出,一个表格的动态输出
在后面引用了手册里面的字符串部分,尤其是变量解析的细节和字符串操作部分。
目录:
首先是无序列表 ul
public function build_ul_lists()
{
$initials26= array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
$i=0;
$html.="</br>";
foreach ($initials26 as $key =>$initial)
{
$html.= "\n<ul class=\"inline unstyled initial-button-list\"><button class=btn>".$initial."</button>";
$labels=NULL;
$words = $this->processSearch("","",$initial,1,12);
for($i=0;$i<12;$i++)
{
$link = '<a class="need_model" href="view.php?word_id='.$words[$i]['word_id'].'">'.$words[$i]['word'].'</a>';
//另一种表达方式
$link = "<a class='need_model' href='view.php?word_id=".$words[$i]['word_id']."'>".$words[$i]['word']."</a>";
$word_info = "$link";
$labels.= "\n<li> ".$word_info."</li>";
}
$html.=$labels."</ul>";
}
echo $html;
}
第5行:</br>在页面上输出一个换行
第8行:\n 在生成的HTML代码中 换行,方便阅读查看
第17行:\n 在生成的HTML代码中 换行,方便阅读查看
第17行:  在页面上输出一个空格
单引号
定义一个字符串 的最简单的方法是用单引号把它包围起来 (标点符号')。
如果想要输出一个单引号,需在它的前面加个反斜线 (\)。在单引号前或在字符串的结尾处 想要输出反斜线,输入两条 (\\)。注意,如果在任何其它的字符前加了反斜线,反斜线将会被直接输出。
$link = '<a class="need_model" href="view.php?word_id='.$words[$i]['word_id'].'">'.$words[$i]['word'].'</a>';
在单引号字符串中的变量和特殊含义的字符将不会被替换。
因此,
class="need_model"
直接写就行;
$words[$i]['word'].'</a>'
PHP变量不能写在单引号里面,而是写出来,并用'.'连接符连接。
双引号
如果字符串是包围在双引号(")中, PHP将对一些特殊的字符进行解析:
Sequence | Meaning |
---|---|
\n | 换行 (LF or 0x0A (10) in ASCII) |
\r | 回车 (CR or 0x0D (13) in ASCII) |
\t | 水平方向的 tab(HT or 0x09 (9) in ASCII) |
\v | 竖直方向的 tab (VT or 0x0B (11) in ASCII) (since PHP 5.2.5) |
\f | 换页 (FF or 0x0C (12) in ASCII) (since PHP 5.2.5) |
\\ | 反斜线 |
\$ | 美金dollar标记 |
\" | 双引号 |
\[0-7]{1,3} | 符合该表达式顺序的字符串是一个八进制的字符 |
\x[0-9A-Fa-f]{1,2} | 符合该表达式顺序的字符串是一个十六进制的字符 |
$html.= "\n<ul class=\"inline unstyled initial-button-list\"><button class=btn>$initial</button>";
用双引号定义的字符串最重要的特征是变量会被解析!因此,
<button class=btn>$initial</button>
PHP变量直接写在HTML里面就可以
class=\"inline unstyled initial-button-list\"
而要想输出双引号本身,则要加 \ (其实这个地方直接用单引号就OK了,HTML标签的属性值既可以用单引号包括,也可以用双引号包括)
对比单引号和双引号
$link = '<a class="need_model" href="view.php?word_id='.$words[$i]['word_id'].'">'.$words[$i]['word'].'</a>';
$link = "<a class='need_model' href='view.php?word_id=$words[$i]['word_id']'>{$words[$i]['word']}</a>";
当然是用双引号要简便,PHP变量直接写在HTML里面就可以;但是注意,复杂变量最好用{ }包起来
第二个例子是表格Table
public function searchWordsByPage($keyword,$group,$initial,$page,$perPageNum)
{
$perPageNum=12;//每一页显示的条数为20条
$currentPageFirst=($page-1)*$perPageNum+1;
$currentPageLast=$page*$perPageNum;
$tab_str="";
$tab_str.="<table id='tab_searched' class ='table table-striped table-bordered table-hover table-condensed initial-button-list' align='center'>";
$tab_str.="<thead><td><i class='icon-search'></i></td><td>词语</td><td>词语类型</td><td>正负极性</td><td>褒贬值[-3,3]</td><td>词语类别</td><td>编辑</td></thead>";
//分页查询
$words = $this->processSearch($keyword,$group,$initial,$currentPageFirst,$perPageNum);
$i=$currentPageFirst-1;
foreach ( $words as $key => $word )
{
$i++;
$labels=NULL;
$labels.="<tr>";
$labels.="<td width=5%>".$i."</td>";
//词语
$link = "<a class='need_model' href='view.php?word_id=".$word['word_id']."'>".$word['word']."</a>";
$labels.="<td width='20%'>".$link."</td>";
//词语类型
$senti_type=($word['senti_type']==1)?"褒贬词":"程度副词";
$labels.="<td width='15%'>".$senti_type."</td>";
//正负极性
$senti_jixing=($word['senti_value']>0)?"正面":"负面";
$labels.="<td width='15%'>".$senti_jixing."</td>";
//褒贬值-3~3
$labels.="<td width='15%'>".$word['senti_value']."</td>";
//中英文:1,中文;2,英文
$word_type=($word['word_type']==1)?"中文":"English";
$labels.="<td width='15%'>".$word_type."</td>";
//编辑链接
$link2 = "<a class='need_model' href='view.php?word_id=".$word['word_id']."'>编辑</a>";
$labels.="<td width='15%'>".$link2."</td>";
$tab_str.=$labels;
}
$tab_str.="</table>";