玩转PHP字符串变量解析和函数,动态输出HTML

记得刚开始写代码的时候,看到动态输出ul,table就头晕;

因为当时对HTML标签,制表符PHP字符串,单引号/双引号的操作还很不熟练

几个项目后,再看这些代码,就有了很亲切的感觉


虽然用框架后都直接用封装好的控件输出,但是原生态的总是那么有魅力,让人细细品味


本文总结2个例子,一个无序列表的动态输出,一个表格的动态输出

在后面引用了手册里面的字符串部分,尤其是变量解析的细节和字符串操作部分。


目录:

  1. 首先是无序列表 ul
    1. 单引号
    2. 双引号
  2. 第二个例子是表格Table
  3. 关于特殊字符
  4. Heredoc结构
  5. Nowdoc结构
  6. 变量解析
    1. 简单句法规则
    2. 复杂句法规则
  7. 字符串操作
    1. 存取和修改字符串中的字符
    2. 有用的函数和操作符
    3. 转换成字符串
    4. 字符串转变成数字


  8. 字符串函数

首先是无序列表 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>&nbsp".$word_info."</li>";
            }
            
            $html.=$labels."</ul>";
        }
        echo $html;
    }


第5行:</br>在页面上输出一个换行

第8行:\n 在生成的HTML代码中 换行,方便阅读查看

第17行:\n 在生成的HTML代码中 换行,方便阅读查看

第17行:&nbsp 在页面上输出一个空格


单引号

定义一个字符串 的最简单的方法是用单引号把它包围起来 (标点符号')。

如果想要输出一个单引号,需在它的前面加个反斜线 (\)。在单引号前或在字符串的结尾处 想要输出反斜线,输入两条 (\\)。注意,如果在任何其它的字符前加了反斜线,反斜线将会被直接输出。


$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将对一些特殊的字符进行解析:

Escaped characters
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>";            
  
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值