@liuximing
2018-02-07T10:06:27.000000Z
字数 2304
阅读 149
PHP
| 变量不存在 | false | false |
| 变量存在,等于: NULL |
false | false |
| 变量存在,等于: $var; (一个声明了,但是没有值的变量) '' (空字符串) 0 (作为整数的0) 0.0 (作为浮点数的0) '0' (作为字符串的0) FALSE array() (一个空数组) |
true | false |
==(!=)只比较变量的值
<?phpif ('5' == 5) {echo "'5'", ' == 5';}if ('5' != 5) {echo "'5'", ' != 5';}
'5' == 5
===(!==)不仅比较变量的值,还要比较变量的类型
<?phpif ('5' === 5) {echo "'5'", ' === 5';}if ('5' !== 5) {echo "'5'", ' !== 5';}
'5' !== 5
PHP索引数组(num-value)和关联数组(key-value)本质上都是有序映射,所以它们都可以是离散的。需要注意的是,尽管它们分别对应JSON的数组和对象,但离散后的索引数组转成JSON后也将变成一个对象,除非你试用了array_values()函数。
也正是因为索引数组也支持离散,你才可以在正序循环中删除索引数组中的某些元素并且没有遗漏,否则你不得不倒序循环以实现删除某些元素的功能。
<?php$a = array(0, 1, 't', 't', 4, 't');var_dump($a);foreach ($a as $num => $value) {if ($value === 't') {unset($a[$num]);}}var_dump($a);
array(6) {[0]=>int(0)[1]=>int(1)[2]=>string(1) "t"[3]=>string(1) "t"[4]=>int(4)[5]=>string(1) "t"}array(3) {[0]=>int(0)[1]=>int(1)[4]=>int(4)}
PHP的true值等于1,回显也是1,而false值等于0,并且无法回显。
<?phpvar_dump(true);var_dump(false);echo true;echo false;
bool(true)bool(false)1
所以,它们不能和字符串类型的“true”或“false”比较。想要比较或者回显“true”或“false”,可以这么做。
<?php$a = false;$b = $a ? 'true' : 'false';echo $b;
false
PHP array_unique()函数只支持一维数组去重,要使用array_unique()对二维数组去重,基本思路就是打平—去重—拆开。
如果嵌套的是索引数组:
<?phpforeach ($arrayArray as &$array) {$array = join(',' $array);}$arrayArray = array_unique($arrayArray);$result = array();foreach ($arrayArray as $array) {$result[] = explode(',' $array);}
如果嵌套的是关联数组:
<?phpforeach ($arrayArray as &$array) {$array = json_encode($array);}$arrayArray = array_unique($arrayArray);$result = array();foreach ($arrayArray as $array) {$result[] = json_decode($array);}
<?php$arr = array(1, 2, 3);foreach ($arr as &$item) {}var_dump($arr);foreach ($arr as $item) {}var_dump($arr);
array(3) {[0]=>int(1)[1]=>int(2)[2]=>int(3)}array(3) {[0]=>int(1)[1]=>int(2)[2]=>int(2)}
让我们看一下究竟发生了什么:
第一次循环结束之后,arr[2]指向的是同一块内存空间。
第二次循环开始之前,item和arr[0],也就是1
- arr[2]被赋值为item和arr[2],也就是2
然后就没有然后了...
习惯了PHP关联数组的用法,我总是会对json_decode()之后的对象做关联数组操作--#。拜托别再这样了,那里没有关联数组,请用->谢谢。
还干过一件更傻的事,就是搞不清json字符串中为什么部分字段被转义了。好吧,那一定是这个json字符串嵌套了其他json字符串,难道不是吗--!。
文件不存在时的错误机制:
require: fatal error,脚本停止执行。
include: warning,脚本继续执行。
其他
require_once和include_once性能稍差,但可以避免重复加载。