如果我要从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
。