昨天做模版的时候,碰着个关于数组的问题,或许是这样的:提取文章中所有的标签,并把它们放到一个数组中,然后提取这个数组的中随机的一个标签,并在SQL数据库中提取这个标签的文章。
或许的代码如下所示:
$tap = array(); $tap = array_rand($tap);可是在调试的时候,假如文章中没有标签数据,则会呈现这个错误,借误如下:
array is empty这里说一下,我用的PHP5.2版本没有发明这个错误,可是php7.0版本上就会呈现这个错误并阻止页面的加载
厥后加一个判定数组是否为空,这个错误就办理了
关于判读PHP数组是否为空的几种要领:
isset成果:判定变量是否被初始化说明:它并不会判定变量是否为空,而且可以用来判定数组中元素是否被界说过
留意:当利用isset来判定数组元素是否被初始化过期,它的效率比array_key_exists高4倍阁下
<?php $a = ''; $a['c'] = ''; if (!isset($a)) echo '$a 未被初始化' . ""; if (!isset($b)) echo '$b 未被初始化' . ""; if (isset($a['c'])) echo '$a 已经被初始化' . ""; // 显示功效为 // $b 未被初始化 // $a 已经被初始化empty成果:检测变量是否为”空”说明:任何一个未初始化的变量、值为 0 或 false 或 空字符串”" 或 null的变量、空数组、没有任何属性的工具,都将判定为empty==true
留意1:未初始化的变量也能被empty检测为”空”
留意2:empty只能检测变量,而不能检测语句
<?php $a = 0; $b = ''; $c = array(); if (empty($a)) echo '$a 为空' . ""; if (empty($b)) echo '$b 为空' . ""; if (empty($c)) echo '$c 为空' . ""; if (empty($d)) echo '$d 为空' . "";var == null成果:判定变量是否为”空”说明:值为 0 或 false 或 空字符串”" 或 null的变量、空数组、都将判定为 null
留意:与empty的显著差异就是:变量未初始化时 var == null 将会报错。
<?php $a = 0; $b = array(); if ($a == null) echo '$a 为空' . ""; if ($b == null) echo '$b 为空' . ""; if ($c == null) echo '$b 为空' . ""; // 显示功效为 // $a 为空 // $b 为空 // Undefined variable: cs_null成果:检测变量是否为”null”说明:当变量被赋值为”null”时,检测功效为true
留意1:null不区分巨细写:$a = null; $a = NULL 没有任何区别
留意2:仅在变量的值为”null”时,检测功效才为true,0、空字符串、false、空数组都检测为false
留意3:变量未初始化时,措施将会报错
<?php $a = null; $b = false; if (is_null($a)) echo '$a 为NULL' . ""; if (is_null($b)) echo '$b 为NULL' . ""; if (is_null($c)) echo '$c 为NULL' . ""; // 显示功效为 // $a 为NULL // Undefined variable: cvar === null成果:检测变量是否为”null”,同时变量的范例也必需是”null”说明:当变量被赋值为”null”时,同时变量的范例也是”null”时,检测功效为true
留意1:在判定为”null”上,全便是和is_null的浸染沟通
留意2:变量未初始化时,措施将会报错
总结:PHP中,”NULL” 和 “空” 是2个观念。
isset 主要用来判定变量是否被初始化过
empty 可以将值为 “假”、”空”、”0″、”NULL”、”未初始化” 的变量都判定为TRUE
is_null 仅把值为 “NULL” 的变量判定为TRUE
var == null 把值为 “假”、”空”、”0″、”NULL” 的变量都判定为TRUE
var === null 仅把值为 “NULL” 的变量判定为TRUE
留意:在判定一个变量是否真正为”NULL”时,大多利用 is_null,从而制止”false”、”0″等值的滋扰。