我应该以这种方式使用阵列吗?

时间:2012-09-21 12:51:16

标签: php arrays

我有这样的功能:

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

现在如果array结束为空,它将是假的,如果它有一些但我不关心它有什么,因为我只是,例如,向该数组添加更多数据;可以这样使用if()语句吗?

对象数组的问题(只需$ arrayz-> foo = 12)?

或者我应该使用empty()?

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

所以我知道我将永远得到一个数组。我不在乎它里面是什么。

编辑2:

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

但如果我认为我会得到一些东西,我应该使用附加检查。

3 个答案:

答案 0 :(得分:3)

如果fetch_array_from_somewhere只返回数组,那么你可以这样做。空数组的计算结果为false

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

答案 1 :(得分: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.
}

答案 2 :(得分:1)

使用empty()是可行的方法。如果函数返回布尔值,则应该使用布尔检查。