做开发嘛,一个是要开心,一个是要顺手。
最近咧搞财务系统比较多,我们聊点好玩的。。。
运算、比较
哈哈...开坑
$a = '1.11';
$b = '0.11';
var_dump($a);//string(4) "1.11"
var_dump($b);//string(4) "0.11"
$re = $a - $b;
var_dump($re);//float(1)
$a = '11';
$b = '1';
var_dump($a);//string(4) "11"
var_dump($b);//string(4) "1"
$re = $a - $b;
var_dump($re);//int(10)
结论:
1.在PHP底层运算的过程中,会自动进行类型转换,小数的转换成float,整数转换成int。
2.需要对数字有小数点后几位限制的,记得处理一下。number_format();
var_dump(0123 == 123);
var_dump('0123' == 123);
var_dump('0123' === 123);
一方面是0开的头整形数字PHP底层会认为是八进制;另一方面是sting转换成int时会把前边的0去掉
var_dump(0123 == 123);// false,PHP会默认把0123当作8进制来处理,实际转化为10进制就是83,显然这不是相等的。
var_dump('0123' == 123);// true这里php会非常有趣的将’0123’转换成一个数字而且默认去掉了前面的0也就是123==123
var_dump('0123' === 123);// false很显然上面的问题已经说过了数字和字符串类型不一致。
结论:
下面$x的结果是多少?
$x = NULL;
if ('0xFF' == 255) {
$x = (int)'0xFF';
}
$x = ?
注意点:
首先'oxFF' == 255我们好判断,会进行转换将16进制数字转换成10进制数字,0xff = 255。PHP使用is_numeric_string 判断字符串是否包含十六进制数字然后进行转换。
但是$x = (int)'0xFF';是否也会变成255呢?显然不是,将一个字符串进行强制类型转换实际上用的是convert_to_long,它实际上是将字符串从左向右进行转换,遇到非数字字符则停止。因此0xFF到x就停止了。所以$x=0
结论:
经过下面的运算 $x的值应该是多少?
$x = 3 + "15%" + "$25"
参考示例四的结论2
这个是考虑运算符优先级的...
$a = true && false;
var_dump($a);
$a = true and false;
var_dump($a);
$arr = array(0,1,2,3);
foreach ($arr as $key => $value) {}
var_dump(current($arr));//最后指针停留在数组结尾,取不到值了输出false
$arr = array(0,1,2,3);
foreach ($arr as $key => $value) {
//$arr其实是进行了一次传值,用的是$arr_copy
$arr[$key] = $value;//进行了改值,则发生分离现象
}
var_dump(current($arr));//输出1
输出false 与 1;(PHP5.6环境下,php7已经做了修改);
那这个又是为什么呢?【和PHP内核有关,变量分离改变】
current() 函数返回数组中的当前元素的值。
每个数组中都有一个内部的指针指向它的"当前"元素,初始指向插入到数组中的第一个元素。
提示:该函数不会移动数组内部指针。要做到这一点,请使用 next() 和 prev() 函数。
相关的方法:
end() - 将内部指针指向数组中的最后一个元素,并输出
next() - 将内部指针指向数组中的下一个元素,并输出
prev() - 将内部指针指向数组中的上一个元素,并输出
reset() - 将内部指针指向数组中的第一个元素,并输出
each() - 返回当前元素的键名和键值,并将内部指针向前移动
版权属于: 吕滔博客
原文地址: https://lvtao.net/dev/1559.html
转载时必须以链接形式注明原始出处及本声明。
[abc] |
匹配中括号中的单个字符,如a或b或c |
[^abc] |
匹配除了a、b、c等字符的其他单个字符 |
[a-z] |
匹配一个字符范围,如a到z |
[a-zA-Z] |
匹配一个字符范围,如a-z 或 A-Z |
^ |
匹配行的开始 |
$ |
匹配行的结束 |
\A |
匹配一个字符串的开始 |
\z |
匹配一个字符串的结束 |
. |
匹配任意单个字符 |
\s |
匹配空白字符,如空格,TAB |
\S |
匹配非空白字符 |
\d |
匹配一个数字 |
\D |
匹配非数字 |
\w |
匹配一个字母 |
\W |
匹配非字母 |
\b |
匹配字符边界 |
(...) |
引用所有括号中的内容 |
(a|b) |
a或者b |
a? |
零个或1个a |
a* |
零个或多个a |
a+ |
1个或多个a |
a{3} |
3次重复的a |
a{3,} |
3次或3次以上重复的a |
a{3,6} |
3到6次重复的a |
修正符 | |
/g |
查找所有可能的匹配 |
/i |
不区分大小写 |
/m |
多行匹配 |
/s |
单行匹配 |
/x |
忽略空白模式 |
/e |
可执行模式,PHP专有 |
/A |
强制从目标字符串开头匹配 |
/D |
使用$限制结尾字符,则不允许结尾有换行 |
/U |
只匹配最近的一个字符串;不重复匹配 |
添加新评论