确定数组是否有长度的最快方法?

时间:2013-12-02 01:20:45

标签: php

如果我从sql查询的某些结果中创建一个数组,如下所示:

$res[] = self::create_array($q2->row_array());

执行if (isset($res[0]))而不是if (count($res) > 0)会不会更快?一些结果数组的大小约为1500个元素;或者这方面的优化是否可以忽略不计?

2 个答案:

答案 0 :(得分:2)

在这种情况下使用isset()可能更快

这两个函数不是同义词,但是:

  • isset()计算出是否设置了数组索引,
  • count()计算数组中有多少项

在这种特殊情况下,您可以使用任一功能,但您应该根据您的尝试使用它们。

如果你想要的只是查看数组是否为空,那么empty()函数就是你要找的。如果数组为空,则返回true;如果数组不为空,则返回false

答案 1 :(得分:2)

假设create_array返回PHP数组,那么count是“同样快” - 或者更确切地说,两个操作都是O(1) - 并且依赖根据阵列的大小。这是因为数组在内部存储它们的大小

话虽如此,如果create_array返回任意Countable,那么count 可能必须做更多工作,具体取决于返回对象的实现方式 - 想象一下返回了一个实现为单链接列表的对象;这需要O(n)时间来计算。

在任何情况下,使用empty在语义上更清晰,如Darragh的a small micro-benchmark所示,与挂钟时间中的isset相同。

另请参阅:Is PHP's count() function O(1) or O(n) for arrays?