当前位置:  编程技术>php
本页文章导读:
    ▪有关在smarty中调用php内置函数的问题      相信有很多朋友还不知道,可以在smarty模板里调用php的内置函数,我们一起来看看它的用法。 模板书写: {'param1'|functionName:'param2':'param3'}   php函数原型: echo functionName('param1','param2','param3').........
    ▪php字符串分割函数explode的例子      在php中分割一个字符串,我们可以使用函数explode()(),其原型如下。 array explode (string $separator, string $string [, int $limit]) 该函数有3个参数,第一个参数$separator设置一个分割字符(串)。第二个参.........
    ▪使用 preg_replace 函数 匹配图片并加上链接的方法           介绍:preg_replace 执行正则表达式的搜索和替换,如果只是单纯的匹配字符串建议使用str_replace()(),因为其执行效率高的多。 mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int li.........

[1]有关在smarty中调用php内置函数的问题
    来源: 互联网  发布时间: 2013-12-24

相信有很多朋友还不知道,可以在smarty模板里调用php的内置函数,我们一起来看看它的用法。

模板书写:
{'param1'|functionName:'param2':'param3'}
 
php函数原型:
echo functionName('param1','param2','param3');
实例:
{'1234567'|substr:'1':'2'}

下面这个和函数的参数顺序有关系
{'a'|str_replace():'A':'abcd'}
 
直接延伸到,直接在php中写一个函数调用,不需要注册修改器的.
 
更深一步的研究:发现数组会出错.
分配了一个数组array给Smarty,假设Smarty的分界符为'{' 和'}'。
在很多资料上都看到,在Smarty中要求数组的长度时,可以用在数组后便加|count的方法调用。即通过{array|count}获得 array的长度。但是今天在写模板时,发现这样得不到数组的长度,而只是得到一个返回的字符串Array。也就是说仅仅是返回了{array}的结果, 而没有返回其array的长度。
查看smarty\plugins文件夹,发现并没有count的相关方法,也就是说,count是直接调用了php中的方法。
后来通过网络上的资料,发现可以在count前面加@,从而正确的获取数组的长度。再进一步查看Smarty的源码,发现Smarty对属性调节器后边的 方法名进行处理时,会对前边加@的进行特殊处理。因此作出判断:在Smarty中的属性调节器中调用php中定义好的函数时,可以通过加@来表示。
1、对类型为数组的方法进行测试时,发现不加@符号都会出错。比如:要对一个数组调用count方法求出数组的长度,就可以这样调用{array|@count},而要对数组调用end方法得出数组的最后一组数据时,则可以通过{array|@end}。
2、在对字符串的相关函数进行测试,发现加不加@都可以正常的调用。
3、其他的尚未认真测试。
对于在smarty中调用复杂的php函数不予鼓励,因为Smarty的本意就是要实现代码和模板分离,不要偏离了人家的设计初衷。
 
模板书写:
{'param1'|functionName:'param2':'param3'}
 
php函数原型:
echo functionName('param1','param2','param3');
 
实例:
{'1234567'|substr:'1':'2'}
下面这个比较怪 和函数的参数顺序有关系
{'a'|str_replace:'A':'abcd'}
 
Smarty调用自定义函数
调用自定义函数需要用到register_function() 来注册
这里为大家举个例子,常见的字符串切割
函数如下
 

代码如下:
<?php
function SmartyLen($params){
extract($params);
$len=strlen($text);
$max=$length;
for   ($i=0;$i<$length;$i++){
           $chr=substr($text,$i,1);
           if(ord($chr)>0x80)//字符是中文
           {
               $length++;
               $i++;
      $len--;
            }
}
$str=substr($text,0,$length);
if($len>$max)$str.="...";
Return $str;
}
 


注册函数
$smarty->register_function('len',"SmartyLen");

模板调用
{len text="测试下" length="1"} //注意这里的text和length其实是函数里的2个参数函数的参数必须要以函数内部变量名一致,其实传回去的的是个数组,在函数里用extract($params);把数组中的变量导入到当前的符号表。


    
[2]php字符串分割函数explode的例子
    来源: 互联网  发布时间: 2013-12-24

在php中分割一个字符串,我们可以使用函数explode()(),其原型如下。
array explode (string $separator, string $string [, int $limit])

该函数有3个参数,第一个参数$separator设置一个分割字符(串)。第二个参数$string指定所要操作的字符串。$limit参数是可选的,指定最多将字符串分割为多少个子串。
该函数返回一个由被分割的子串组成的数组。

来看下面的例子,对一个由逗号分隔的多行文本数据进行分析。

例1,分割字符串。
 

代码如下:

<?php
$this_year = 2013;
$text = <<< EOT
祝无双,F,1982,广东,普遍职员
李三兵,M,1981,河北,普通职员
赵朴秀,F,1980,韩国,项目经理
EOT;

$lines = explode("\n", $text);    //将多行数据分开
foreach ($lines as $userinfo) {
   $info = explode(",", $userinfo, 3);  //仅分割前三个数据
   $name = $info[0];
   $sex = ($info[1] == "F")? "女" : "男";
   $age = $this_year - $info[2];

   echo "姓名: $name $sex . 年龄:$age <br/>";
}

/* 输出结果是:
姓名:祝无双 女 年龄:31
姓名:李三兵 男 年龄:32
姓名:赵朴秀 女 年龄:33
*/
?>
 

以上代码,先对文本按行进行分割,然后将每行字符串按","进行分割,并取前三个数据进行处理分析,然后进行整理并输出。

另外,为大家介绍php的另一个内建函数implode(),用于连接数组成为字符串。

与分割字符串函数相对应的是implode()函数,它的别名函数叫做join(),函数原型分别如下。
string implode(string $glue, array $pieces)
string join(string $glue, array $pieces)

implode()或join()函数可以将数组$pieces中的元素用指定的字符$glue连接起来。
下面为大家举一个简单的例子,供学习参考。
例2:
 

代码如下:
<?php
$fruits = array('apple', 'banana', 'pear');
$str = implode(", ", $fruits);
echo $str;
?>

    
[3]使用 preg_replace 函数 匹配图片并加上链接的方法
    来源: 互联网  发布时间: 2013-12-24

     介绍:preg_replace 执行正则表达式的搜索和替换,如果只是单纯的匹配字符串建议使用str_replace()(),因为其执行效率高的多。
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit])

     在 subject 中搜索 pattern 模式的匹配项并替换为 replacement。如果指定了 limit,则仅替换 limit 个匹配,如果省略 limit 或者其值为 -1,则所有的匹配项都会被替换。

     参照之前说过的 php用preg_match_all匹配文章中的图片 ,下面给出匹配图片并加上链接的代码:
 

代码如下:
<?php
$con = file_get_contents("http://www./wzjs/");
$pattern="/<[img|IMG].*?src=/blog_article/[/index.html'|\"](.*?(?:[\.gif|\.jpg|\.png]))[\'|\"].*?[\/]?>/";
$new_con = preg_replace($pattern,"<a href='/blog_article/$1/index.html'>$0</a>",$con);
echo $new_con;
?>
 

说明:$0表示这个匹配内容,$1表示第一个()匹配的内容 $2表示第二个()匹配的内容,以此类推!
这样就给图片加上链接了,感兴趣的朋友不妨自己动手测试下哦。

您可能感兴趣的文章:
php匹配图片地址的代码一例
PHP正则匹配日期和时间(时间戳转换)的例子
php匹配任何网址的正则表达式
php正则匹配重写html图片img路径的代码一例
PHP正则匹配获取URL中域名的代码
php用preg_match_all匹配文章中的图片
php正则表达式匹配URL中的域名


    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,