2013-12-02 5 views
0

Если я создаю массив из некоторых результатов из запросов SQL, как так:Самый быстрый способ определить, имеет ли массив длину?

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

не было бы быстрее сделать if (isset($res[0])), а не if (count($res) > 0)? Размер некоторых массивов результатов составляет около 1500 элементов; или оптимизация в этой области незначительна?

+1

достаточно легко репер его, чтобы определить разницу в скорости –

+1

очень быстро «п» грязное сравнение в 'https: // eval.in/74973' предполагает, что' Исеть() ' значительно быстрее. Но, как утверждает @Sverri M. Olsen, функции не являются синонимами. И 'empty()' также выглядит довольно быстро. –

ответ

2

Предполагая, что create_array возвращает массив PHP, то это count «Подобно тому, как быстрый» - или, вернее, обе операции O (1) - и делает не зависит от размера массива. Это потому, что массивы хранят свой размер внутри.

Это, как говорится, если create_array возвращает произвольное счетное, то countможет должны делать больше работы, в зависимости от того, как реализован возвращаемый объект - представьте, если объект реализован в виде единого связанный список был возвращен; для этого потребуется время O (n).

В любом случае использование empty более семантически прозрачно и, как показано на рисунке a small micro-benchmark от Darragh, выполняет те же функции, что и isset в режиме настенных часов.

Смотрите также: Is PHP's count() function O(1) or O(n) for arrays?

2

Использование isset(), вероятно, быстрее, в этом случае

Эти две функции не являются синонимами, хотя:

  • isset() выясняет, если индекс массива установлен, и
  • count() подсчитывает, сколько элементов есть в массиве

В этом конкретном случае вы можете использовать либо functi но вы должны использовать их в соответствии с тем, что вы пытаетесь сделать.

Если все, что вы хотите, это увидеть, является ли массив пустым или нет, то функция empty() будет тем, что вы ищете. Он возвращает true, если массив пуст, и false, если он не пуст.

Смежные вопросы