比较两个字符串是否相等,最常见的方法就是使用“===”来判断,至于它和“==”的区别,简单来说就是前者强调“identical”类型也要求一样;后者要求“equal”,值相同就可以了,参考【1】。或者使用strcmp来判断,但是这个能够告诉你两个字符串是否相等,但是无法告诉你在那里不同。我的思路是单字符串分割为一个个字母(character),这样比较就能精确知道在那个位置不同了。分隔字符串,使用“str_split”就可以了,语法参考【2】。然后输出结果数组,好处是连空格也会作为数组的元素。我之前的例子就是因为前一个字符串包含2个空格,而后一个只有一个。但是输出的时候看到的显示都是一样的。 也可以按照其他分隔符进行分割,如“explode”或者“preg_split”,
一般能用 !=, == 比较两个对象是否相等,只所以说是两个对象,是因为他们不一定全部为字符串,也能为整型等等。比如
代码如下 | 复制代码 |
$a = "joe"; |
如果用 !==,===(能看到多了一个等号)比较的话,两个对象的类型要严格相等才能返回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教程 explode() 函数
php string 函数
定义和用法
explode() 函数把字符串分割为数组。
语法
explode(separator,string,limit)参数 描述
separator 必需。规定在哪里分割字符串。
string 必需。要分割的字符串。
limit 可选。规定所返回的数组元素的最大数目。
例子
在本例中,我们将把字符串分割为数组:
代码如下 | 复制代码 |
<?php $str = "hello world. it's a beautiful day."; print_r (explode(" ",$str)); ?> |
输出:
代码如下 | 复制代码 |
array ( [0] => hello [1] => world. [2] => it's [3] => a [4] => beautiful [5] => day. ) |
str_split 拆分函数
定义和用法
str_split() 函数把字符串分割到数组中。
语法
str_split(string,length)参数 描述
string 必需。规定要分割的字符串。
length 可选。规定每个数组元素的长度。默认是 1。
说明
如果 length 小于 1,str_split() 函数将返回 false。
如果 length 大于字符串的长度,整个字符串将作为数组的唯一元素返回。
例子
例子 1
代码如下 | 复制代码 |
<?php print_r(str_split("hello")); ?> |
输出:
代码如下 | 复制代码 |
array ( [0] => h [1] => e [2] => l [3] => l [4] => o ) |
例子 2
代码如下 | 复制代码 |
<?php print_r(str_split("hello",3)); ?> |
输出:
代码如下 | 复制代码 |
array ( [0] => hel [1] |
preg_split -- 用正则表达式分割字符串
说明
array preg_split ( string pattern, string subject [, int limit [, int flags]])
返回一个数组,包含 subject 中沿着与 pattern 匹配的边界所分割的子串。
如果指定了 limit,则最多返回 limit 个子串,如果 limit 是 -1,则意味着没有限制,可以用来继续指定可选参数 flags。
flags 可以是下列标记的任意组合(用按位或运算符 | 组合):
preg_split_no_empty
如果设定了本标记,则 preg_split() 只返回非空的成分。
strstr("母字符串", "子字符串")用来查找子字符串在母字符串中第一次出现的位置,并返回母字符串中从子字符串开始到母字符串结束的部分。比如
echo strstr("abcdefg", "e"); //将输出 "efg"
如果未找到子字符串,则返回空。因为能用来判断一个字符串中是否含有另外一个字符串:
代码如下 | 复制代码 |
$needle = "iwind"; $str = "i love iwind"; if (strstr($str, $needle)) { echo "里面有 iwind"; } else { echo "里面没有 iwind"; } 将会输出"里面有 iwind" |
preg_match正则
preg_match 兼容的正则表达式语法中 代表单词边界
所以:下面应该是可以???
代码如下 | 复制代码 |
$a="test,admin,abc"; $b="te"; $exist=preg_match("/{$b}/",$a); if($exist) { echo "存在"; }else { |
看一下相关说明
int preg_match ( string pattern, string subject [, array matches [, int flags]] );
preg_match() 返回 pattern 所匹配的次数。要么是 0 次(没有匹配)或 1 次,因为 preg_match() 在第一次匹配之后将停止搜索。preg_match_all() 则相反,会一直搜索到 subject 的结尾处。如果出错 preg_match() 返回 false。
示例:
代码如下 | 复制代码 |
<?php $a = "abcdefgabcdefaaag"; preg_match('|abc([a-z]+)g|isu',$a,$out1); preg_match_all('|abc([s]+)g|isu',$a,$out2); echo "<pre>"; print_r($out1);
print_r($out2); echo "</pre>"; ?> |
写法:
使用双引号时和单引号的不同
代码如下 | 复制代码 |
<?php preg_match_all("/href="(.*)"/isu",$contents,$out); preg_match_all('|href="(.*)"|isu',$contents,$out); ?> |
php strlen() 函数
定义和用法
strlen() 函数返回字符串的长度。
语法
strlen(string)参数 描述
string 必需。规定要检查的字符串。
代码如下 | 复制代码 |
<?php echo strlen("www.111cn.net!"); //13 echo strlen("中国人!");//6 strlen得到的值是汉字个数的2倍 ?> |
尝试将php_mbstring.dll复制到%windows%目录下
代码如下 | 复制代码 |
<? $str = '懂php的都知道strlen与mb_strlen是求字符串长度的函数'; echo strlen($str)'.<br />'.mb_strlen($str,'utf-8'); ?> |
运行上述代码,返回值如下:
66
34
懂php的都知道strlen与mb_strlen是求字符串长度的函数,但是对于一些初学者来说,如果不看手册,也许不太清楚其中的区别。
先看这样一段代码吧(先决条件是:字符编码为utf-8):
1、用file_get_contents或者fopen、file、readfile等函数读取url的时候,会创建一个名为$http_response_header的变量来保存http响应的报头,使用fopen等函数打开的数据流信息可以用stream_get_meta_data来获取。
2、php教程5中新增的参数context使这些函数更加灵活,通过它我们可以定制http请求,甚至post数据。
示例代码1:
代码如下 | 复制代码 |
<?php $html = file_get_contents('http://www.111cn.net); print_r($http_response_header); // or $fp = fopen('http://www.example.com', 'r'); print_r(stream_get_meta_data($fp)); fclose($fp); ?> |
示例代码2:
代码如下 | 复制代码 |
<?php $data = array ('foo' => 'bar'); $data = http_build_query($data); $opts = array ( 'http' => array ( 'method' => 'post', 'header'=> "content-type: application/x-www-form-urlencoded " . "content-length: " . strlen($data) . " ", 'content' => $data ), ); $context = stream_context_create($opts); $html = file_get_contents('http://www.example.com', false, $context); echo $html; ?> |
实例三
获取过来以后自动输出到浏览器,我们有没有其他的方式组织获取的信息,然后控制其输出的内容呢?完全没有问题,在curl_setopt()函数的参数中,如果希望获得内容但不输出,使用curlopt_returntransfer 参数,并设为非0值/true!,完整代码请看:
<?php // create a new curl resource $ch = curl_init(); // set url and other appropriate options curl_setopt($ch, curlopt_url, “http://www.google.nl/”); curl_setopt($ch, curlopt_returntransfer, true); // grab url, and return output $output = curl_exec($ch); // close curl resource, and free up system resources curl_close($ch); // replace ‘google’ with ‘phpit’ $output = str_replace(’google’, ‘phpit’, $output); // print output echo $output; ?>