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


fastest way to determine if array has a length?

如果我要从sql查询的一些结果创建一个数组,比如:

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

if (isset($res[0]))不是比做if (count($res) > 0)更快吗?一些结果数组的大小约为1500个元素;还是该领域的优化可以忽略不计?

假设create_array返回一个PHP数组,那么count是"Just as Fast"-或者更确切地说,两个操作都是O(1)-并且取决于数组的大小。这是因为数组在内部存储其大小

也就是说,如果create_array返回任意Countable,那么count可能需要做更多的工作,这取决于返回的对象是如何实现的——想象一下,如果返回了一个实现为单链表的对象;这将需要O(n)时间来计数。

在任何情况下,使用empty在语义上都更清晰,并且如Darragh的一个小型微基准所示,在墙上的时钟时间中执行与isset相同的操作。

另请参阅:是PHP';s count()函数O(1)或O(n)用于数组?

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

不过,这两个功能并不是同义词:

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

在这种特殊的情况下,你可以使用任何一个函数,但你应该根据你想要做的事情来使用它们

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