好吧,我是一个相对较新的程序员,花了很多时间来编写和编写某些代码的不同方法。
任何人都可以说下列之间是否有任何根本区别,如果有的话应该优先于另一个:
if (empty($array)) {
//must be an empty array
}
if (true === empty($array)) {
//must be an empty array
}
if (is_array($array) && count($array) === 0) {
//must be an empty array
}
很抱歉,如果这看起来微不足道,但不是开玩笑,这些东西占用了我很多时间的决定,最终在某种程度上,正确性,稳健性或性能(或组合)必须有所不同
答案 0 :(得分:2)
您的前两个示例完全相同,因为empty()
将始终返回TRUE
或FALSE
。第二个示例唯一更改的是检查是隐式还是显式。
同样重要的是要注意empty()
不仅用于数组。它检查变量的值是否等同于FALSE
。空数组只是其中一个值,其中还包括空字符串和零。
使用empty()
与if ($value)
之类的唯一真正区别是empty()
包含对isset()
的隐式调用,因此即使您使用的是变量,它也能正常工作检查不存在。
如果你确定变量是一个数组,那么你的所有三个选项都是等价的。实际上,如果变量存在且是数组类型,则以下所有内容都等效于检查数组中的元素:
if ($array)
if (empty($array))
if (empty($array) === TRUE)
if (count($array) === 0)
if (count($array))
您问题中的示例之间的唯一区别是第三个示例中的显式类型检查,以及前两个中的隐式isset()
检查。如果你确定该变量存在,并且是一个数组,那么这三个在功能上是相同的。
答案 1 :(得分:1)
如果你知道它是一个数组
if (empty($array))
或
if (!count($array))
如果您不确定数组已设置
if (isset($array) && !count($array))
如果你不确定它实际上是一个数组
if (is_array($array) && !count($array))
如果您想要使用详细信息
if ( !isset($array) || !is_array($array) || (is_array && empty($array)) )
但是你应该知道你自己的代码之前发生了什么,所以,尽管寻求额外的冗长是令人钦佩的,但通常没有必要。
答案 2 :(得分:1)
是的,存在差异。我不知道为什么你这么困惑。所以首先要减少一点:
if (empty($array)) {
// is just empty - array or not
}
if (true === empty($array)) {
// is just empty - array or not
}
这两个在技术上是相同的。 empty
是一个布尔表达式,因此与true相比是正确的。所以你可以在这里选择这两个中的第一个,但你也可以写更多并采取第二个。但是,你明白了。
但是:
if (is_array($array) && count($array) === 0) {
//must be an empty array
}
您明确测试类型是否为Array
且该数组没有值。你也可以在这里(仅供参考):
if ($array && is_array($array)) {
//must be an empty array
}
因为没有值的数组等于布尔值false。有问题吗?评论
答案 3 :(得分:0)
嗯,唯一的区别是,在前两个中,参数并不一定是一个数组 - is_empty(false)
也会输出false,但这应该不是问题。
我一直使用第一种也是最简单的方法。
答案 4 :(得分:0)
你应该选择if (emtpy($array))
。第二个示例没有功能差异,第一个示例更具可读性。第三个例子似乎不必要地冗长。
答案 5 :(得分:0)
第一个对我来说是正确的。
第二个是没有必要的,因为php的empty()
函数只能返回布尔值,你不需要像这样检查返回值:
if (true === empty($array)) {
//must be an empty array
}
第三项检查还检查变量类型是否真的是一个数组。如果您只检查count($a) == 0
并且$a
不是数组php将生成通知。
答案 6 :(得分:0)
1。 您应该了解==和===之间的差异,以便了解它。
===符号将检查双方的值和类型是否相同。所以0 ==“0”为真,但0不是===“0”。
2。 你应该更好地理解你想做什么:你想确定你的阵列存在吗?你想确定你的数组是空的吗?你想要两个吗?
如果你知道你有阵列,但不确定它是否为空,那么最好的解决方案是:
if (empty($ARRAY)) {
/* code if array is empty */
}
请注意,如果阵列不存在,将执行此代码。要检查数组是否存在,您可能希望使用以下代码包装上面的代码:
if (isset($ARRAY)) {
/* code if array is set */
}
3。 你问是否有差异。我们来看看:
if (empty($array)) {
//must be an empty array
}
if (true === empty($array)) {
//must be an empty array
}
这两个代码检查数组是否为空。第一种是更流行的写作方式,但他们都会做这项工作。
if (is_array($array) && count($array) === 0) {
//must be an empty array
}
这个有点不同:条件的is_array部分将检查数组是否存在,这将检查您的其他代码是否存在。请注意,对于未设置的变量,count()返回0,如果要检查数组是否存在,则返回is_array。
答案 7 :(得分:0)
这取决于您应该选择哪种方式。
empty($array)
最简单,最常用/最常用的方式是
if (empty($array))
如果变量$array
每次出现时都是如此:
(见这里:empty
)
true === empty($array)
第二个版本
if (true === empty($array))
是不必要的。函数empty
返回一个布尔值,你不必确保类型是布尔值===
。这很难写
if (true == empty($array))
,这等于第一个版本。
is_array($array) && count($array) === 0
最后一个版本是interresting。它将变量$array
测试为数组。
您不会将count
类型安全的结果与===
进行比较。它只返回数字。为了确保数字大于零,足以将其视为像这样的布尔值
if (is_array($array) && count($array))
如果你不确定$array
是一个数组但是必须是这样的话,那么这个案例就是必要的。
在其他情况下,第一种是最好的方式。