如果我从sql查询的某些结果中创建一个数组,如下所示:
$res[] = self::create_array($q2->row_array());
执行if (isset($res[0]))
而不是if (count($res) > 0)
会不会更快?一些结果数组的大小约为1500个元素;或者这方面的优化是否可以忽略不计?
答案 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相同。