180

我只需要检查一个数组是否有多个元素。我正在尝试这样做:

if (isset($arr['1']))

另一种传统方式是

if (sizeof($arr)>1)

两者哪个更好?在这种情况下,我应该如何在两种替代方法之间进行判断?是否有任何性能检查表可用于测量哪个更好?

4

11 回答 11

346

用这个

if (sizeof($arr) > 1) {
     ....
}

或者

if (count($arr) > 1) {
     ....
}

sizeof()是 的别名count(),它们的工作方式相同。

编辑: 回答问题的第二部分:问题中的两行代码不是替代方法,它们执行不同的功能。第一个检查是否设置了 at 的值$arr['1'],而第二个返回数组中元素的数量。

于 2012-04-05T08:14:14.260 回答
44

if(is_array($arr) && count($arr) > 1)

只是为了确保 $arr 确实是一个数组。

sizeof是 的别名count,我更喜欢使用 count 因为:

  1. 少输入 1 个字符
  2. 快速浏览 sizeof 可能意味着数组的内存大小,太技术性了:(
于 2012-04-05T08:11:58.810 回答
6
if (count($arr) >= 2)
{
  // array has at least 2 elements
}

sizeof()是 的别名count()。两者都适用于非数组,但如果参数是数组或对象,它们只会返回大于 1 的值Countable,所以你很安全。

于 2012-04-05T08:13:52.933 回答
6

显然使用count($arr) > 1(sizeof只是count) 的别名是最好的解决方案。根据数组的结构,可能有大量元素但没有$array['1']元素。

于 2012-04-05T08:13:59.557 回答
6

采用count()

if (count($my_array) > 1) {
// do
}

这个页面解释得很好http://phparraylength.com/

于 2013-06-26T01:28:02.443 回答
6

我更喜欢count()函数而不是sizeOf()assizeOf()只是一个别名,count()并且在许多其他语言中并不相同。许多程序员希望sizeof()返回分配的内存量。

于 2014-12-11T09:17:28.853 回答
4

对于检查数组,empty() 优于 sizeof()。

如果数组包含大量数据。计算数组大小需要更多时间。但是检查空总是很容易。

//for empty
  if(!empty($array))
     echo 'Data exist';
  else 
     echo 'No data';


 //for sizeof
 if(sizeof($array)>1)
      echo 'Data exist';
 else 
    echo 'No data';
于 2015-07-22T07:05:36.683 回答
3

isset() 仅检查是否设置了变量。与大小或数组包含的内容无关

于 2012-04-05T08:11:32.603 回答
2

我假设 $arr 是一个数组,那么这就是你要找的

if ( sizeof($arr) > 1) ...
于 2012-04-05T08:13:28.097 回答
1

第一种方法 if (isset($arr['1'])) 不适用于关联数组。

例如,以下代码显示“不,不超过一个”。

$arr = array(
    'a' => 'apple',
    'b' => 'banana',
);

if (isset($arr['1'])) {
    echo "Yup, more than one.";
} else {
    echo "Nope, not more than one.";
}
于 2014-10-22T20:06:36.780 回答
0

我在 Swift 4/5 中进行数组循环并相应地填充默认值

   for index in 0..<3
    {
        let isIndexValid = allObjects.indices.contains(index)
        var yourObject:Class = Class()
        if isIndexValid { yourObject = allObjects[index]}
        resultArray.append(yourObject)
    }
于 2019-04-01T23:41:39.077 回答