<?php //定义一个包含数字值的数组 $files = array("file11.txt","file22.txt","file1.txt","file2.txt"); function mySort($arr,$select = false){ for($i=0;$i for($j;$j //如果第二个参数为ture则使用strcmp()函数比较大小 if($select){ //前后两个值比较结果大于0则交换位置 if(strcmp($arr[$j],$arr[j 1])>0){ $tmp = $arr[$j]; $arr[$j] = $arr[$j 1]; $arr[$j 1] = $tmp; } //如果第二个参数为false则使用strnatcmp()函数比较大小 }else{ //如果比较结果大于0交换位置 if(strnatcmp($arr[$j],$arr[$j 1])>0){ $tmp = $arr[$j]; $arr[$j] = $arr[$j 1]; $arr[$j 1]; = $tmp; } } } } return $arr; //排序后的数组 } print_r(mySort($files,true)); //选择按字典顺序排序: file1.txt file11.txt file2.txt file22.txt print_r(mySort($files,false)); //选择按自然顺序排序:file1.txt file2.txt file11.txt file22.txt ?> 在PHP中也提供了这个函数忽略大小写的版本的函数strnatcasecmp()用法与strnatcmp()函数相同。 除了上面利用函数比较我们还可以使用“===”来判断,至于它和“==”的区别 一般能用 !=, == 比较两个对象是否相等,只所以说是两个对象,是因为他们不一定全部为字符串,也能为整型等等。 如果用 !==,===(能看到多了一个等号)比较的话,两个对象的类型要严格相等才能返回true;否则用==,!=则会将字符串自动转换成相应的类型,以便进行比较.
代码如下 | 复制代码 | 22 == "22"; // 返回 true 22 === "22"; // 返回false 正因为这样,所以我们的程式时常会发生一些想不到的“意外”:
代码如下 | 复制代码 | 0 == "我爱你"; // 返回true 1 == "1 我爱你";// 返回true 还有一种比较方法 var_dump("1" == "1e0"); var_dump("1" == "0x1"); var_dump("20" == "2e1"); var_dump("10" == " 0x0a"); 等等; 对, 也许你会说在PHP手册的附录中有一部分关于这个问题的总结. 问题是,这只是知其然, 那么所以然是什么呢? 今天就有一个网友问了我一个问题:
代码如下 | 复制代码 | var_dump("1" == "1e0"); //true var_dump("1" == "1ef"); //false 这两个的结果为什么不一样啊. 也就是说, 上面的等式a要成立, 那么唯一的解释就是PHP讲他们双发都当作int来比较. 但是, var_dump(“1e0″),或者var_dump(“1″),都是string啊. 因为PHP不区分类型, 所以她采用一个策略, 当你的变量看起来是一个数字的时候, 那么她就认为这个变量是一个数字. 简单来说, numeric_string就是表示数字的字符串: 也就是说,如下的比较结果都是真:
代码如下 | 复制代码 | var_dump("1" == "1e0"); var_dump("1" == "0x1"); var_dump("20" == "2e1"); var_dump("10" == " 0x0a"); 呵呵, 读者们遇到过这个问题的困扰么?
代码如下 | 复制代码 | if("608E-4234" == "272E-3063"){ echo "oh shit! they're equal!\n"; }else{ echo "obviously, isn't?\n"; } PHP开发Tips:如果想要判断两个字符串是否相等,使用 === 而不是 ==。 |
|
|
|
|
|