strcmp()函数的使用是比较两个字符串,如果两个字符串完全相等我们就返回0,否则就会有各种返回值,此函数并区分大小写,有需要的朋友可参考。
对比后返回值说明
如果str1 和str2 相等则返回0 。
如果str1小于str2则返回<0(但不一定时-1,网上好多都说是-1,是不对的,具体数值大小根据实际情况而定) 。
如果str1大于str2则返回>0(但不一定时1,具体数值大小根据实际情况而定) 。
例
代码如下 |
复制代码 |
strcmp(date(‘Y-m-d’,$user->last_time), date(“Y-m-d”,time())) == 0
|
如果要不区别大小写
strncasecmp用于不区分大小写的比较字符串的一部分,从字符串的开头开始比较,第三个参数,为要比较的长度:
代码如下 |
复制代码 |
echo strncasecmp("abcdd", "abcde", 3);
|
// 返回 0, 比较了 abc 和 abc, 由于不区分大小写,所以两者相同
php字符串比较我们还可以使用 ==来,如
代码如下 |
复制代码 |
$a='aa';
$b='www.111cn.net';
if( $a == $b )
{
echo '相等';
}
else
{
echo '不等';
}
|
还可以使用===来比较
代码如下 |
复制代码 |
22 == "22"; // 返回 true
22 === "22"; // 返回false
|
在php中rawurlencode与rawurlencode都是对字符进行编码的,下面我来给大家介绍urlencode和rawurlencode的区别,有需要了解的朋友可参考。
urlencode的用途就是编码字符串,把原字符串中所有除”-_”以为的非所有字母数字字符替换成百分号(%)后跟两位十六进制数,但是需要注意:由于历史原因会把空格替换+号。rawurlencode其实和urlencode一样,也是用来编码字符串的,唯一的不同是它是使用RFC1738 编码,也就是会把空格替换成%20。
它们对应的解码函数是urldecode和rawurldecode。参考官方网站的说明,urldecode解码给出的已编码字符串中的任何%##,加号(’+')被解码成一个空格字符;rawurldecode解码字符字符串中百分号(%)后跟两位十六进制。有两点区别,一是urldecode解码是对百分号(%)后任意两位字符都去会进行解码,例如%MN也会解码,但是会失败;rawurldecode则只会对百分号(%)后两位是十六进制(0-9A-F)的字符才会解码,二是urldecode会把+号解码为空格。
我们再看来两个函数在php官方的介绍吧。
urlencode — 编码 URL 字符串
Report a bug 说明
string urlencode ( string $str )
此函数便于将字符串编码并将其用于 URL 的请求部分,同时它还便于将变量传递给下一页。
Report a bug 参数
str
要编码的字符串。
Report a bug 返回值
返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 RFC1738 编码(参见 rawurlencode())不同。
代码如下 |
复制代码 |
Example #1 urlencode() 例子
<?php
echo '<a href="mycgi?foo=', urlencode($userinput), '">';
?>
Example #2 urlencode() 与 htmlentities() 例子
<?php
$query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar);
echo '<a href="mycgi?' . htmlentities($query_string) . '">';
?>
|
rawurlencode — 按照 RFC 1738 对 URL 进行编码
Report a bug 说明
string rawurlencode ( string $str )
根据 » RFC 3986 编码指定的字符。
Report a bug 参数
str
要编码的 URL。
Report a bug 返回值
返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数。这是在 » RFC 3986 中描述的编码,是为了保护原义字符以免其被解释为特殊的 URL 定界符,同时保护 URL 格式以免其被传输媒体(像一些邮件系统)使用字符转换时弄乱。
例
代码如下 |
复制代码 |
Example #1 在 FTP URL 里包含一个密码
<?php
echo '<a href="ftp://user:', rawurlencode('foo @+%/'),
'@ftp.example.com/x.txt">';
?>
以上例程会输出:
<a href="ftp://user:foo%20%40%2B%25%2F@ftp.example.com/x.txt">
|
通过上面对解码函数的描述,可以推论,使用urlencode或rawurlencode编码的都可以使用urldecode进行解码,但是如果原字符串中含有空格,使用urlencode编码后的字符串使用rawurlencode解码后获得的字符串会和原字符串不同。
我们知道sprintf() 函数把格式化的字符串写写入一个变量中,我们经常会看到这类代码了,下面我来介绍sprintf() 函数使用方法,有需要的朋友可参考参考。
用法
sprintf(format,arg1,arg2,arg++)
说明
参数 format 是转换的格式,以百分比符号 ("%") 开始到转换字符结束。下面的可能的 format 值:
•%% - 返回百分比符号
•%b - 二进制数
•%c - 依照 ASCII 值的字符
•%d - 带符号十进制数
•%e - 可续计数法(比如 1.5e+3)
•%u - 无符号十进制数
•%f - 浮点数(local settings aware)
•%F - 浮点数(not local settings aware)
•%o - 八进制数
•%s - 字符串
•%x - 十六进制数(小写字母)
•%X - 十六进制数(大写字母)
arg1, arg2, ++ 等参数将插入到主字符串中的百分号 (%) 符号处。该函数是逐步执行的。在第一个 % 符号中,插入 arg1,在第二个 % 符号处,插入 arg2,依此类推。
我在微信开放平台会看到如下代码
代码如下 |
复制代码 |
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$keyword = trim($postObj->Content);
$time = time();
$msgType = "text";
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>0</FuncFlag>
</xml>";
if(!empty( $keyword ))
{
$contentStr = $this->keyrep($keyword);
if( empty($contentStr) )
{
$contentStr ="你是故意的吧,没文化真可怕";//你是故意的吧,没文化真可怕;
}
//$contentStr = @iconv('UTF-8','gb2312',$keyword);
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}else{
$contentStr = '没文化真可怕,居然不会打字!';//$this->keyrep($keyword);
//$contentStr = @iconv('UTF-8','gb2312',$keyword);
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}
|
上面用到的是xml中了,下面再看一个网友写的例子
代码如下 |
复制代码 |
<?php
/**
* sprintf()函数使用
* @date 2012-12-17
* @author cntnn11
*/
/**
* 手册定义:函数把格式化的字符串写写入一个变量中。
* 他的可识别的格式
* %% - 返回百分比符号
* %b - 二进制数
* %c - 依照 ASCII 值的字符
* %d - 带符号十进制数
* %e - 科学计数法(比如 1.5e+3)
* %u - 无符号十进制数
* %f - 浮点数(local settings aware)
* %F - 浮点数(not local settings aware)
* %o - 八进制数
* %s - 字符串
* %x - 十六进制数(小写字母)
* %X - 十六进制数(大写字母)
* sprintf($str, arg1, arg2, arg3 ...);
*/
/**
* 1. %%
* 把%%替换成%
*/
$testStr = '测试下%%这个参数。会被替换成什么呢';
echo sprintf($testStr),'<br/>';
//-> 测试下%这个参数。会被替换成什么呢;
//只剩下一个%了
//看来还真的只是返回一个‘%’。但是实际应用中该怎么用呢?
//我也不知道~
echo '<br/><hr/><br/>';
/**
* 2. %b
* 该参数只能替换整型数据。如果是浮点型,那么他只会取整数部分。小数点后边的会忽略
* 如果是一个非整型数据,那么返回 0
*/
$testStr = '听说%b会替换成二进制数,真的吗?';
$arg = '10';
echo sprintf($testStr, $arg),'<br/>';
//-> 1010; $arg=10; 真的替换了!
//-> 101; $arg=4.5
//-> 0; $arg=str/bool...
echo '<br/><hr/><br/>';
/**
* 3. %c 返回字符编码的ASCII码
* TIP:[他不是返回ASCII码]
* $arg接受一个int传入即ASCII的数字值,然后返回该值对应的字符
*/
$testStr = '我们来测试下 %c : 试试看能返回ASCII码吗';
$arg = '122';
echo sprintf($testStr, $arg);
//-> A; $arg=65;
//-> z; $arg=122
echo '<br/><hr/><br/>';
/**
* 4. %d 将一段字符里的%d替换成int型
* TIP:这里可以是任意一个int整型。
* 如果是一个浮点数据,那么只会替换整数部分
* 如果是非数字的,那么会替换成0
*/
$testStr = "这是一个ID,ID号是%d,";
$arg = '-4';
echo sprintf($testStr, $arg);
//-> 4; $arg=4.5
//-> 0; $arg=[a-zA-Zs];
echo '<br/><hr/><br/>';
/**
* 5. %e 科学计数法
* TIP:将一段很长很长的int整型数据以科学计数法的形式呈现
* 同%d,该函数同样会忽略掉小数点后面的,任何非数值数据替换成0
*/
$testStr = "我很长,有N多位。。。 %e";
$arg = '46498464654864564642449463699789789313';
echo sprintf($testStr, $arg);
//-> 4.649846e+14; $arg=464984646548645.64642449463699789789313
//-> 0.000000e+0; $arg=asdfasdf;
echo '<br/><hr/><br/>';
/**
* 5. %u - 无符号十进制数
* 不明白。。。如果有是负数,他的值不知道是啥值
*/
$testStr = "我是无符号的十进制数。。。 %u";
$arg = '456';
echo sprintf($testStr, $arg);
echo '<br/><hr/><br/>';
/**
* 6. %f - 浮点数(local settings aware)
* 难道和%d是相反的?
* 这个会返回一个浮点数,并且小数点后面只有固定的6位
* 字符串同样为 0 ;
*/
$testStr = "和那个d有啥区别呢?%f";
$arg = '456.235645';
echo sprintf($testStr, $arg);
echo '<br/><hr/><br/>';
/**
* 7. %F - 浮点数(not local settings aware)
* 难道和%f是相反的?怎么和小f没区别?不会吧
*/
$testStr = "和那个小写的f有啥区别呢?%F";
$arg = '12312316.46898';
echo sprintf($testStr, $arg);
echo '<br/><hr/><br/>';
/**
* 8. %o - 八进制数
* 同%d一样。只不过参数传入一个八进制数值
*/
$testStr = "将八进制数替换成十进制的 %o";
$arg = '8';
echo sprintf($testStr, $arg);
echo '<br/><hr/><br/>';
/**
* 9. %x - 十六进制数(小写字母)
* 同%d/%o一样。只不过参数传入一个小写字母的十六进制数值
*/
$testStr = "将十六进制数替换成十进制的 %o";
$arg = '456d12';
echo sprintf($testStr, $arg);
echo '<br/><hr/><br/>';
/**
* 10. %X - 十六进制数(大写字母)
* 同%d/%o/%x一样。只不过参数传入一个大写字母的十六进制数值
* 貌似%x %X两个字母大小写没区别...
*/
$testStr = "将大写字母的十六进制数替换成十进制的 %o";
$arg = '456D12';
echo sprintf($testStr, $arg);
echo '<br/><hr/><br/>';
/**
* 11. %s - 字符串
* 用你传入的字符串替换掉%s
*/
$string = "这是用来测试的sprintf的字符串( %s )。今天消费了%f元。从西二旗到知春路有%d站。上班";
$arg = '';
echo sprintf($string, $arg, 234, 10);
echo '<br/><hr/><br/>';
?>
|
set_time_limit函数可以临时定义你当前页面的执行时间,set_time_limit(0)时页面就永远有效直到程序执行完毕了,下面我来介绍set_time_limit用法。
语法 : void set_time_limit (int seconds)
注意 : 当PHP是执行在安全模式时,set_time_limit( )将不会有结果,除非是关闭安全模式或是修改结构档案中(在PHP3中叫做php3.ini,在PHP4则叫做php.ini)的时间限制。
例
代码如下 |
复制代码 |
<?
set_time_limit(1000)
?>
|
当此函数被调用时, set_time_limit()会从零开始重新启动超时计数器。换句话说,如果超时默认是30秒,在脚本运行了了25秒时调用 set_time_limit(20),那么,脚本在超时之前可运行总时间为45秒。
例
代码如下 |
复制代码 |
<?php
require_once('db.php');
$stmt = $db->query($sql);
while ($row = $stmt->fetchRow()) {
set_time_limit(0);
// your code here
}
?>
|
一个简单的php中strtotime给个时间返回该时间所在的星期一实现代码,有需要的朋友可参考。
strtotime() 函数将任何英文文本的日期时间描述解析为 Unix 时间戳。
很简单:
代码如下 |
复制代码 |
echo strtotime('-1 Mon',strtotime("2010-01-01"));//返回日期所在时间的星期一
echo strtotime('Mon',strtotime("2010-01-01"));//返回日期所在时间的下一个星期一的时间
|
标签:[!--infotagslink--]