2

我有这样的功能:

$arrayz = fetch_array_from_somewhere();
if($arrayz) {
   $arrayz['foo'] = 12;
} 

现在,如果array最终为空,它将是错误的,如果它有一些东西,但我不在乎它有什么,因为我只是,例如,向该数组添加更多数据;这样使用if()语句可以吗?

对象数组的同样问题(只是 $arrayz->foo = 12 代替)?

或者我应该使用empty()?

编辑1:只是为了澄清当我说对象数组时,我的意思是:对象数组。

所以我知道我总会得到一个数组。我不在乎里面有什么。

编辑2:

因此,总而言之,如果我知道我将获得一个数组,无论是完整的还是array(),如果它是常规数组或对象数组(对象数组),我应该只使用这种形式。

但如果我认为我会得到除此之外的东西,我应该使用额外的检查。

4

3 回答 3

3

如果fetch_array_from_somewhere只返回数组,那么你可以这样做。一个空数组被评估为false

对于对象,您不能这样做,对象总是被评估为true除了从空标签创建的 SimpleXML 对象。

于 2012-09-21T12:55:53.260 回答
2

您可以使用自己的,也可以使用以下任何一种:

if(sizeof($array)){
    // has array values
}

这将检查数组的大小。如果它返回 0 那么它是空的 - 我喜欢使用它(或下面的计数),因为它是检查数组值的实际数量的正确方法,例如if(sizeof($array) > 2){ // more than 2 array values }.

if(count($array)){
    // has array values
}

这与上述相同。

if(!empty($array)){
    // its not empty
}

这将检查它是否为空(即没有数组值)或者它是否根本没有设置(与 相同isset()

可是等等...

if(is_array($array)){
    // its an array
}

这总是很好的混合。字符串、数字、对象和其他任何不是数组的东西都将匹配上述所有内容。在您开始尝试访问它之前,您要确保您正在处理的实际上是一个数组。

所以,这通常是我的代码:

if(is_array($array) && sizeof(array)){
   // manipulate
}
else {
  // isn't an array or doesn't have any values.
}
于 2012-09-21T13:00:39.157 回答
1

使用empty()是要走的路。如果函数返回布尔值,则应该使用布尔值检查。

于 2012-09-21T12:53:11.600 回答