PHP函数 sprintf() 函数官方定义为:sprintf() :把格式式的字符串写入一个变量中
语法为:
sprintf(format,arg1,arg2,arg++);
参数:
format:必须,转换格式
arg1 :必须,规定插入 format 字符串中第一个%符号处的参数
arg1 :可选,规定插入 format 字符串中第二个%符号处的参数
arg1++:可选,规定插入 format 字符串中第三、四等%符号处的参数
参数 format 的转换格式,以百分比符号(%)开始到转换字符结束,下面是有可能的format值
%% – 返回百分比符号
%b – 二进制数
%c – 依照 ASCII 值的字符
%d – 带符号十进制数
%e – 可续计数法(比如 1.5e+3)
%u – 无符号十进制数
%f – 浮点数(local settings aware)
%F – 浮点数(not local settings aware)
%o – 八进制数
%s – 字符串
%x – 十六进制数(小写字母)
%X – 十六进制数(大写字母)
下面是一些demo:
代码如下 | 复制代码 |
// 1. %% :把 %% 替换成 % $str = '测试一下 %% 这个参数,会被替换成什么'; echo sprintf($str); //返回结果: 测试一下 % 这个参数,会被替换成什么(%%被替换成一个%) // 2. %b :该参数只能替换整型数据,如果是浮点型,只会取整数部分,会忽略小数点后面的数据。如果是非整型数据。www.111Cn.net返回 0 $str = '参数 %b 会替换成二进制数'; $arg = '10'; echo sprintf($str,$arg); //返回结果:参数 1010 会替换成二进制数 $arg = 10.23; echo sprintf($str,$arg); //返回结果:参数 1010 会替换成二进制数 $arg = 'abc'; echo sprintf($str,$arg); //返回结果:参数 0 会替换成二进制数 // 3. %c 返回字符编码的ASCII码 $arg = 65; $str = "数字 {$arg} 对应的ASCII码为 %c "; echo sprintf($str,$arg); //返回结果:数字 65 对应的ASCII码为 A // 4. %d 将一段字符里的%d替换成int型,数据要求同 $b 相同 $str = 'ID号为 %d '; $arg = -3; echo sprintf($str,$arg); //返回结果:ID号为 -3 $arg = 4.5; echo sprintf($str,$arg); //返回结果:ID号为 4 $arg = 'abc'; echo sprintf($str,$arg); // www.111Cn.net返回结果:ID号为 0 // 5. %s - 字符串 $str = "这是用来测试的sprintf的字符串( %s )。今天消费了%f元。从钟楼到小寨有%d站。上班"; $arg = '%s'; echo sprintf($str,$arg,6,5); //返回结果:这是用来测试的sprintf的字符串( %s )。今天消费了6.000000元。从钟楼到小寨有5站。上班 |
至于其它的参数。大家可以试着测试一下.
下面说一下这个函数的一些用途。比如我们在对一张数据表所有数据做多个字段更新时。如果使用循环更新的话。那是很耗费资源的。这里就要用到我们sprintf()函数了。
在数据库批量更新时。我一般采用 case then when end 的语法来做。基本语法如:
代码如下 | 复制代码 |
UPDATA table SET field = CASE id WHEN 1 THEN 'value1' WHEN 2 THEN 'value2' WHEN 3 THEN 'value3' END WHERE id IN (1,2,3) |
上面的意思就是说。更新 table 设置 id = 1 的值为 value1, id = 2 的值为 value2 , id = 3 的值为 value3 .这样参数上面的函数将sql语句结合成这样SQL语句。只需一条SQL就可以进行批量更新。具体的方法为:
代码如下 | 复制代码 |
//比如 id 对应的值为以下数组 $info = array(1=>'张三',2=>'李四',3=>'王五'); $ids = implode(',',array_keys($info)) //获取所有的ID字符串 //组合SQL $sql = "UPDATA user SET username = CASE id"; foreach($info as $id=>$username){ $sql .= sprintf("WHEN %d THEN %s",$id,$username); } $sql .= "END WHERE id IN ($ids)"; // $model->query($sql) |
上面就可以完成批量更新的操作。后面的 where子句确保只有3行数据执行
在PHP利用Header函数跳转时需会碰到一些无法跳转的问题,这里一聚教程小编总结了常见的三种导致无法跳转的例子与解决方法给各位,希望此例子对大家带来帮助。在通过php的header('Location:http://www.111cn.net')做跳转时.有时会不成功.追其原因有以下几种情况:
写法错误
•location和“:”号间不能有空格,否则会出错。
•在用header()前不能有任何的输出。
•header后的PHP代码还会被执行,所以在函数之前最好加上exit()来停止之后程序的执行
另外还有一个问题,算是比较低级了
编码报错
代码如下 | 复制代码 |
<?php |
要求header前没有任何输出,否则会报错。
当我们以 ANSI 格式编码时(多数默认情况),可以正常实现PHP跳转。
代码如下 | 复制代码 |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> |
有时我们需要在网页中事先判断跳转条件,如果符合则正常显示网页,而网页是以 UTF-8 格式编码,此时使用header则会报错。
原因是 UTF-8 编码在文本开始处偷偷地输出了三个字符(BOM),默认对我们不可见。因此不满足“header前没有任何输出”的条件,从而报错。
解决方法是使用Notepad++等文本编辑器打开文件,转为 UTF-8 无 BOM 编码格式,保存退出即可。
PHP header 默认302临时重定向,如需要使用301永久重定向,可使用以下代码。
代码如下 | 复制代码 |
<?php header("HTTP/1.1 301 Moved Permanently"); header("Location: http://feitsui.net/"); ?> |
如果不关注HTTP状态,可以使用JavaScript实现跳转。
代码如下 | 复制代码 |
<script type="text/javascript"> |
三,顺序问题
代码如下 | 复制代码 |
<?php |
如上代码为什么不跳转到header("Location:http://www.baidu.com/");?
另外一个问题服务器读PHP文件,是读一点发送给客户端一点,还是一次读完后,才发送给客户.Javascript是怎么个读法?
php脚本是从上往下是顺序读的,在服务器端一次性读完以后发给客户端,这个文件,当读到if时本应该发送header("Location:http://www.baidu.com/");但是下面还有header("Location:01.php");
header("Location:03.php");
header("Location:http://www.sina.com");就会继续读到最后一条而echo的优先级低于低于header,当很多个header并列时就会把最后一条显示,就像显示数组一样,$forum[],当你写 echo $forum就只会把数组中的最后一条记录显示。javascript是客户端脚本,当你的页面下载后以后所有的javascript脚本文件就已经在你的电脑里面了,只有对其操作时才会有响应。
例子
XML 文件:
代码如下 | 复制代码 |
<?xml version="1.0" encoding="ISO-8859-1"?> PHP 代码: <?php else 输出: object(SimpleXMLElement)#1 (4) |
假如有一个“iciba.xml”文件,其内容如下:
代码如下 | 复制代码 |
<?xml version="1.0" encoding="UTF-8"?> <?php header("Content-Type: text/html; charset=UTF-8"); $listcount = count($xmldata->sent); for($i=0;$i<$listcount;$i++){ //第二部分 SimpleXMLElement Object [key] => 天空 [acceptation] => Array;Array; [1] => SimpleXMLElement Object [2] => SimpleXMLElement Object [3] => SimpleXMLElement Object [4] => SimpleXMLElement Object ) )“第二部分”将输出: |
例句:The church tower stood against the sky like a finger pointing towards heaven.
翻译:教堂的尖塔在天空的映衬下宛如指向天空的手指。
例句:A balloon floated across the sky.
翻译:气球飘过天空。
例句:A bolt of lightning lit up the sky.
翻译:(一道)闪电照亮了天空。
例句:A bright moving object appeared in the sky at sunset.
翻译:日落西山时,天空出现了一个移动的发亮物体。
例句:A bright rainbow arched above.
翻译:一弯明亮的彩虹悬挂在天空。
例子,更深入的一个遍历输出生成表格
代码如下 | 复制代码 |
eader("content-type:text/html; charset=utf-8"); //设置编码 echo "<br>循环读取:<br>"; echo "<br>循环读取:<br>"; |
根据本人经验如果在使用php函数或方法出现Call to undefined function curl_init”错误提醒时就是php.ini中配置文件没有配置好了,解决方法也非常的简单
XAMPP打开CURL的方法:
修改 X:/xampp/php/php.ini文件
查找如下代码,大约在952行,XAMPP版本不同可能有点小区别,用编辑器查找就行
;extension=php_curl.dll
将其前面的分号去掉,然后重启Apache,搞定。
如果还是不行我们要注意一点是:要保证php_curl.dll 复制到php安装目录下的ext下,libeay32.dll和ssleay32.dll复制到php安装目录下。(我的配置文件是system32,和php5ts.dll一个地)
在php5.4版本之前如果想让json支持中文我们需要进行一些转换操作,如使用json_encode中文的话会转换成像\\u4e2d\\u6587类的编码了,但有了JSON_UNESCAPED_UNICODE之后直接不转码输出中文,下面我们给大家具体测试一下。
用PHP的json_encode来处理中文的时候, 中文都会被编码, 变成不可读的, 类似”u***”的格式, 还会在一定程度上增加传输的数据量.
代码如下 | 复制代码 |
<?php |
这就让我们这些在天朝做开发的同学, 很是头疼, 有的时候还不得不自己写json_encode.
而在PHP5.4, 这个问题终于得以解决, Json新增了一个选项: JSON_UNESCAPED_UNICODE, 故名思议, 就是说, Json不要编码Unicode.
看下面的例子:
代码如下 | 复制代码 |
<?php |
怎么样, 是不是让大家很开心的改动?
呵呵, 当然, Json在5.4还加入了: JSON_BIGINT_AS_STRING, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES等选项,