php利用大括号截取字符的方法
今天在一个博客源码中看到有$str{1}这种写法,当然非常的不理解是什么意思结果测试之后发现是字符截取了,下面来给各位举几个例子。
代码如下 | 复制代码 |
// 得到字符串中的第一个字节 $str = 'hupeng seo blog'; $first = $str{0}; // $first = h; echo $first; // 得到字符串中的第三个字节 $san = $str{2}; // $san=p; echo $san; // 得到字符串中的最后一个字节 $last = $str{strlen($str)-1}; // $last =g; echo $last; $a = "86-0769-22222222-"; if ($a{strlen($a)-1} == "-") $a = substr($a,0,strlen($a)-1); echo $a; |
其中 $a{strlen($a)-1}只在PHP5.0以上可用
注意:{}截取字符与substr功能是完全一样的在这里我就不给大家测试了,也算是一篇简单的php教程吧,入门级别的哦。
整理了一些学习中可能会用到一具php字符吕操作了例子,这些例子由网上整理并且大部份有简单的测试以直接使用哦,当然php字符串操作函数系统自带的肯定可以使用,具体怎么用大家根据自己情况来定吧。1、字符串的连接符
半角符号“.”是字符串的连接符,可以把两个或两个以上的字符串连接成一个字符串。例如:
<?php
$name = "一聚教程网:";
$url = www.51ebk;
echo $name . $url . ".com";
?>
运行结果为:一聚教程网:www.111cn.net
2、去除字符串首尾空格和特殊字符
用户在输入数据时,经常会在无意中输入多余的空格,在有些情况下,字符串中不允许出现空格和特殊字符,此时就要去除字符串中的空格和特殊字符。
2.1 trim()函数
trim()函数用于去除字符串开始位置以及结束位置的空格,并返回当前去掉空格后的字符串。
语法格式:string trim(string str [,string charlist]);
trim()函数的参数str是要操作的字符串对象,参数charlist是可选参数,指定需要从待定的字符串中删除特定的字符,如果不设该参数,则所有的可选字符都将被删除。参数charlist的可选值如下:
参数值/说明
NULL,空值
t tab,制表符
n 换行符
x0B 垂直制表符
r 回车符
" " 空格
注:除了以上默认的过滤字符外,也可以在charlist中提供需要过滤的特殊字符
例如:
<?php
$str = "rr(:@_@ 一聚教程网 @_@:)";
echo trim($str); //去除字符串左右两边的空格
echo "<br />"; //执行换行
echo trim($str, "rr(::)"); //去除字符串左右两边的特殊字符rr(::)
?>
运行结果:
(:@_@ 一聚教程网 @_@:)
@_@ 一聚教程网 @_@
2.2 ltrim()函数
ltrim()函数用于去除字符串左边的空格或者指定字符串。
语法格式如下:
string ltrim(string str[, string charlist]);
例如:
<?php
$str = " (:@_@ 一聚教程网 @_@:) ";
echo ltrim($str); //去除字符串左边的空格
echo "<br />";
echo ltrim($str, "(:@_@ "); //去除字符串左边的字符@_@:)
?>
运行结果为:
(:@_@ 一聚教程网 @_@:)
一聚教程网 @_@:)
2.3rtrim()函数
rtrim()函数用于去除字符串右边的空格或者指定字符串。
语法格式如下:
string rtrim(string str[, string charlist]);
例如:
<?php
$str = " (:@_@ 一聚教程网 @_@:) ";
echo rtrim($str); //去除字符串右边的空格
echo "<br />";
echo rtrim($str, "@_@:) "); //去除字符串右边的字符@_@:)
?>
运行结果为:
(:@_@ 一聚教程网 @_@:)
(:@_@ 一聚教程网
字符串转义、还原的方法有两种:一种是手动转义、还原字符串数据,另一种是自动转义、还原字符串数据。
1、手动转义、还原字符串数据
字符串可以用单引号(')、双引号("")、定界符({})3种方法定义。当使用字符串时,很可能在该字符串中存在这几种符号与PHP脚本混淆的字符,因此必须要做转义语句。这就需要在他前面加转义符号“”。
“”是一个转义字符,紧跟在“”后面的字符将变得没有任何意义。
例如:
<?php
echo "I'm Tom";
?>
运行结果是:I'm Tom。
2、自动转义、还原字符串数据
自动转义、还原字符串数据可以应用PHP提供的addslashes()函数和stripslashes()函数来实现。
addslashes()函数用来为字符串加入斜线“”。
stripslashes()函数用来将使用了addslashes()函数转义后的字符串还原。
例如:
<?php
$str = "I'm Tom";
$str2 = addslashes($str); //对字符串中的特殊字符进行转义
echo $str2 . "<br />";
echo stripslashes($str2); //将转义后的字符串恢复,然后输出
?>
运行结果:
I'm Tom
I'm Tom
以上两个函数实现了对指定字符串进行自动转义和还原。除了上面介绍的方法以外,还可以对要转义、还原的字符串进行一定的范围限制,通过使用addcslashes()函数和stripcslashes()函数实现对指定范围内的字符串进行自动转义、还原。
addcslashes()函数实现转义字符串中的字符,即在指定的字符串前加上反斜线。
stripcslashes()函数用来将使用addcslashes()函数转义的字符串还原。
例如:
<?php
$str = "自学PHP就上一聚教程网";
$str2 = addcslashes($str, "自学PHP就上一聚教程网");
echo $str2 . "<br />"; //输出转义后的字符串
echo stripcslashes($str2); //输出还原后的字符串
?>
运行结果:
327324321247PHP276315311317321247260311315370
自学PHP就上一聚教程网
长度
PHP提供strlen函数来计算字符串的长度:
$str = "test";
echo strlen($str); // 将输出 4
有点奇怪的是strlen将中日等汉字以及全角字符都当作两个或四个长度计算。好在mbstring或icon两个函数可以帮助解决这个问题,比如:
$len = iconv_strlen($str, "GBK");
$len = mb_strlen($str, "GBK");
注:mbstring模块提供了大量的对含有多字节字符的字符串的处理函数,推荐多加应用,由于这篇文章讲的是字符串入门,所以不打算详细解说。
分隔与连接
PHP允许你把一个字符串按照一个分隔符进行分隔成一个数组,或者将一个数组组合成一个字符串。看下面的例子:
$str = "i love iwind";
$array = explode(" ", $str);
上面的explode函数,就把$str字符串按空格字符进行分隔,结果返回一个数组 $array:array("i", "love", "iwind").与explode函数有类似功能的有:preg_split(), spliti(), split()等函数。
与此相反的,implode和join则能把一个数组结合成一个字符串,他们是具有完全相同功能的函数。
$array = array("i", "love", "iwind");
$str = implode(" ", $array);
例中的implode函数将数组$array的每个元素用空格字符进行连接,返回一个字符串 $str: "i love iwind".
裁剪
一个字符串首和尾,可能不是你想要的部分,就可以用trim,rtrim,ltrim等函数,分别去除一个字符串两端空格,一个字符串尾部空格,一个字符串首部空格。
echo trim(" i love iwind "); // 将得到 "i love iwind"
echo rtrim(" i love iwind "); // 将得到 " i love iwind"
echo ltrim(" i love iwind "); // 将得到 "i love iwind"
其实这三个参数不仅可以去除字符串首尾的空格,还可以去除它们的第二个参数指定的字符,如:
echo trim(",1,2,3,4,", ","); // 将得到 1,2,3,4 两端的","号被裁掉了。
有时还会看到有人使用chop这个函数,其实它是rtrim的同义函数。
大小写
对于英文字母来说,可以用strtoupper,strtolower将其转变成大写或小写。
echo strtoupper("i love iwind"); // 将得到 I LOVE IWIND
echo strtolower("I LOVE IWIND"); // 将得到 i love iwind
比较
一般可以用 !=, == 比较两个对象是否相等,只所以说是两个对象,是因为它们不一定全部为字符串,也可以为整型等等。比如
$a = "joe";
$b = "jerry";
if ($a != $b)
{
echo "不相等";
}
else
{
echo "相等";
}
如果用 !==,===(可以看到多了一个等号)比较的话,两个对象的类型要严格相等才能返回true;否则用==,!=则会将字符串自动转换成相应的类型,以便进行比较.
22 == "22"; // 返回 true
22 === "22"; // 返回false
正因为这样,所以我们的程序时常会发生一些想不到的“意外”:
0 == "我爱你"; // 返回true
1 == "1 我爱你";// 返回true
PHP里还有这样一组用于字符串比较的函数:strcmp,strcasecmp,strncasecmp(), strncmp(),它们都是如果前者比后者大,则返回大于0的整数;如果前者比后者小,则返回小于0的整数;如果两者相等,则返回0.它们比较的原理与其它语言的规则都是一样的。
strcmp是用于区分大小写(即大小写敏感)的字符串比较:
echo strcmp("abcdd", "aBcde"); // 返回 1 (>0), 比较的是 "b"和"B"
strcasecmp用于不区分大小写的字符串比较:
echo strcasecmp("abcdd", "aBcde"); // 返回 -1 (<0), 比较的是"d"和"e"
strncmp用于比较字符串的一部分,从字符串的开头开始比较,第三个参数,为要比较的长度:
echo strncmp("abcdd", "aBcde", 3); // 返回 1 (>0), 比较了 abc 和 aBc
strncasecmp用于不区分大小写的比较字符串的一部分,从字符串的开头开始比较,第三个参数,为要比较的长度:
echo strncasecmp("abcdd", "aBcde", 3); // 返回 0, 比较了 abc 和 aBc, 由于不区分大小写,所以两者是相同的。
还有一种情况是单单比较字符串大小,达不到我们预定的要求,比如照常理 10.gif 会比 5.gif 大,但如果应用上面几个函数,就会返回 -1,即表示 10.gif比5.gif,针对这种情况,PHP提供了两个自然对比的函数strnatcmp,strnatcasecmp:
echo strnatcmp("10.gif", "5.gif"); // 返回 1 (>0)
echo strnatcasecmp("10.GIF", "5.gif"); // 返回 1 (>0)
替换
替换的意义在于将一个字符串的一部分进行改变,使之成为别外一个新的字符串,以满足新的要求。PHP里通常用str_replace("要替换的内容", "要取代原内容的字符串", "原字符串")进行替换。
echo str_replace("iwind", "kiki", "i love iwind, iwind said"); // 将输出 "i love kiki, kiki said"
即将 原字符串中的所有"iwind"都替换成了"kiki".
str_replace是大小写敏感的,所以对你不能设想用 str_replace("IWIND", "kiki",...)替换原字符串中的"iwind".
str_replace还可以实现多对一,多对多的替换,但无法实现一对多的替换:
echo str_replace(array("iwind", "kiki"), "people", "i love kiki, iwind said");
将会输出
i love people, people said
第一个参数中的array("iwind", "kiki")都被替换成了"people"
echo str_replace(array("iwind", "kiki"), array("gentle man", "ladies"), "i love kiki, iwind said");
输出 i love ladies, gentle man said 。也就是说第一个数组中的元素被第二个数组中的相对应的元素替换掉了,如果有一个数组比另一个数组元素数要少,那么不足的都会当作空来处理。
与此有些类似的是strtr,用法请参阅手册.
此外,PHP还提供了substr_replace,实现替换一部分的字符串。语法如下:
substr_replace (原字符串, 要替代的字符串, 开始替换的位置 [, 替换的长度])
其中,开始替换的位置从0开始计算,应该小于原字符串的长度。要替换的长度是可选的。
echo substr_replace("abcdefgh", "DEF", 3); // 将输出 "abcDEF"
echo substr_replace("abcdefgh", "DEF", 3, 2); // 将输出 "abcDEFfgh"
第一个例子中,从第三个位置(即"d")开始替换,从而把 "defgh"都替换成了“DEF”
第二个例子中,也是从第三个位置(即"d")开始替换,但只能替换2个长度,即到e,所以就把"de"替换成了"DEF".
PHP还提供了preg_replace,preg_replace_callback,ereg_replace,eregi_replace等函数应用正则表达式来完成字符串替换,用法请参考手册。
查找与匹配
PHP里用于查找或者匹配或者定位的函数非常多,它们都有不同的意义。这里只讲述用得比较多的strstr,stristr.后者与前者的功能,返回值都一样,只是不区分大小写。
strstr("母字符串", "子字符串")用来查找子字符串在母字符串中第一次出现的位置,并返回母字符串中从子字符串开始到母字符串结束的部分。比如
echo strstr("abcdefg", "e"); //将输出 "efg"
如果找不到子字符串,则返回空。因为可以用来判断一个字符串中是否含有另外一个字符串:
$needle = "iwind";
$str = "i love iwind";
if (strstr($str, $needle))
{
echo "里面有 iwind";
}
else
{
echo "里面没有 iwind";
}
将会输出"里面有 iwind"
字符串删除操作
是这样的
$result = mysql_query($sql);
$string = '{"array":[';
while($row = mysql_fetch_array($result)){
$string .= '{"id":"'.$row['id'].'"},';
}
$string = substr($string,0,-1);
$string .= ']}';
$string = substr($string,0,-1) 这行代码的意思是,对$string 进行裁剪,从第 0 位开始,到倒数第一个。
这样的结果是,如果sql查询后有结果集的话,没问题,但是如果结果集为 空 的话,字符串就变成了{"array":]} ,数组被破坏了。想通过判断结果集是否为空来处理,但是 使用 empty($result) 并没有用,因为这个结果集是否为空,需要用 mysql_fetch_array() 来判断。所以增加$result 为空的判断失败了。
那另外一个解决办法就是从字符串上动手了。我的想法是,我想删除最后一个字符,但是它必须满足某个条件,比如最后一个字符是 ',' ,看php 的api 上,有这么一个方法 rtrim() ,trim() 就是删除一些特殊字符用的,rtrim() 是只对字符串的右边操作。把代码改成下面就OK了。
$string = rtrim($string,',');
PHP 提供的字符串操作的 API 还是比较丰富的。
字符串转换成数组
By 新一 | 2013 年 6 月 28 日 0 Comment
今天在php论坛中看到以为朋友发了一个帖子请教php如何把字符串转换成数组;作为php程序员的新一第一反应是联想到explode(),implode()这两个函数。新一也是用里面的函数进行转换成数组的。
con[1]=28&selt[1]=1&con[2]=29&selt[2]=4&con[3]=26&selt[3]=4
&con[4]=30&selt[4]=2&con[5]=4&selt[5]=1&con[6]=11&con[7]=12
上面就是网友需要转换成PHP数组的字符串;下面也是新一提供PHP转换代码
新一的PHP代码也可以解决字符串转换成数组的问题。最后phper网友应该在手册上面查到了parse_str()函数就可以把字符串转换成PHP数组;下面介绍一下parse_str()函数的说明让自己在脑子中好有印象.
parse_str() 函数把查询字符串解析到变量中。
parse_str(string,array)
string:需要转换的字符串;
array:返回到一个数组中;
如果没有设置array的话就覆盖同名变量
使用自定义函数方式来实现99乘法表,函数是一种可以在任何被需要的时候执行的代码块。
创建 PHP 函数:
所有的函数都使用关键词 “function()” 来开始
命名函数 – 函数的名称应该提示出它的功能。函数名称以字母或下划线开头。
添加 “{” – 开口的花括号之后的部分是函数的代码。
插入函数代码
添加一个 “}” – 函数通过关闭花括号来结束。
例子
一个简单的函数,在其被调用时能输出我的名称的:
代码如下 | 复制代码 |
<html> <body> <?php function writeMyName() { echo "David Yang"; } writeMyName(); ?> </body> </html> |
使用 PHP 函数
现在,我们要在 PHP 脚本中使用这个函数了:
代码如下 | 复制代码 |
<html> Hello world! |
下面我们来写用函数实现99乘法表
代码如下 | 复制代码 |
<php? /** * 9*9乘法表 * string fun_99(int $start=1, int $end =1,bool $sort=true ) * $start 起始数 必须在1-9之间 并且必须为整数 * $end 结束值 必须1-9之间 并且必须为整数并且要大于$start * $sort 表示排序,true表示正序,FALSE表示倒序 */ echo "<hr/>"; function fun_99($start=1,$end =9,$sort=true){ if ($start<1||$start>9){ return '起始数 必须在1-9之间'; } if ($end<1||$end>9){ return '结束值 必须在1-9之间'; } if($start!=(int)($start)){ return '起始数 必须为整数'; } if($end!=(int)($end)){ return '结束值 必须为整数'; } if($start>$end){ return '起始数必须小于结束值'; } $str = ''; if ($sort){ for ($i=$start;$i<=$end;$i++) { $str =$str."<br>"; for ($n=$start;$n<=$end;$n++) { if ($i >= $n) { $str=$str."$i*$n".'='.$i*$n." "; } } } }else{ for ($i=$end;$i>=$start;$i--) { $str =$str."<br>"; for ($n=$end;$n>=$start;$n--) { if ($i >= $n) { $str=$str."$i*$n".'='.$i*$n." "; } } } } return $str; } echo fun_99(1,9,true); ?> |
得到的结果和html一样
最近在学php,用php写个简单99乘法表,用到for循环,其实这个也可以改下放shell中,下面来看两个例子有兴趣的朋友可进入参考。for 语句
如果您已经确定了代码块的重复执行次数,则可以使用 for 语句。
语法
PHP
代码如下 | 复制代码 |
for (initialization; condition; increment) { code to be executed; } |
注释:for 语句有三个参数。第一个参数初始化变量,第二个参数保存条件,第三个参数包含执行循环所需的增量。如果 initialization 或 increment 参数中包括了多个变量,需要用逗号进行分隔。而条件必须计算为 true 或者 false。
例子
下面的例子会把文本 “Hello World!” 显示 5 次:
PHP
代码如下 | 复制代码 |
<html> |
下面再看看99乘法表这个的正序写法,要用到嵌套循环。
代码如下 | 复制代码 |
<?php /** 99乘法表正序 **/ for ($i=1;$i<=9;$i++) { echo "<br>"; for ($n=1;$n<=9;$n++) { if ($i >= $n) { echo "$i*$n".'='.$i*$n; echo " "; } } } ?> |
运行这个php得到的结果 :
下面想让这个乘法表倒序,其实只有for循环里面数字逐渐递减就可以。
代码如下 | 复制代码 |
<?php /** 99乘法表倒序 **/ for ($i=9;$i>=1;$i--) { echo "<br>"; for ($n=9;$n>=1;$n--) { if ($i >= $n) { echo "$i*$n".'='.$i*$n; echo " "; } } } ?> |
倒序显示如下:
PHP浮点数是否有小数了,我们要转换整理可能会丢失小数位数据了,下面我来给大家介绍PHP浮点数转换整型的一些事项,有兴趣的同学可进入参考。先我们来做个实验说明问题的存在
代码如下 | 复制代码 |
$f = 0.58; |
也许你认为他会输出58,但是实际上他输出的是57.
原因是作为浮点型数据,其精度已经损失了一部分,达不到完全精确。所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。
在实际的开发中我们可以使用如下逻辑来解决这种境况
代码如下 | 复制代码 |
intval(round(floatval($value) * 100)); |
round也可以使用ceil目的就是将精度调准。
相关文章
- 这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
php 中file_get_contents超时问题的解决方法
file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25- 相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
- 下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
- php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
- ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
intellij idea快速查看当前类中的所有方法(推荐)
这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02- 今天在写一个vbs的时候,发现中文乱码,后来写好代码正常运行的代码压缩一下给了同事,发现报无效字符,经过验证后发现原来是编码的问题导致,这里就为大家分享一下...2020-06-30
- 1.在没有设置默认值的情况下: 复制代码 代码如下:SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_timeFROM userinfoLEFT JOIN region ON userinfo.adm_regionid = region.id 结果:...2014-05-31
js导出table数据到excel即导出为EXCEL文档的方法
复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht...2013-10-13- 批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
- 本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
- ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果̳...2017-07-06
- 单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab de...2020-06-25
- 最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法
手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21- javascript控制页面控件隐藏显示的两种方法,方法的不同之处在于控件隐藏后是否还在页面上占位 方法一: 复制代码 代码如下: document.all["panelsms"].style.visibility="hidden"; document.all["panelsms"].style.visi...2013-10-13
连接MySql速度慢的解决方法(skip-name-resolve)
最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢。 解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve。原因是默认安装的MySql开启了DNS的反向解析。如果禁用的话就不能...2015-10-21- 本篇文章是对C#方法进行了详细的总结与介绍,需要的朋友参考下...2020-06-25
- 步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04