PHP 배열 : count 또는 sizeof?


216

PHP에서 요소의 수를 찾으려면 $array어느 것이 더 빠르거나 더 낫습니까?

count($array)또는 sizeof($array)?

편집하다

Andy Lester 덕분에 다국어 관점에서 의미를 갖도록 질문을 수정했습니다. 수동 의견자는 말합니다

"[sizeof]는 C를 기반으로하는 다른 많은 언어에서 같은 의미가 아닙니다"

이것이 사실입니까?


72
다 프트 펑크 참조 ... :)
Ben

2
아주 좋은 질문입니다. 그러나 여기를 sizeof라는 좋은 벤치 마크 사이트는 단지 21μs 빠른입니다
sinaneker

답변:


191

내가 사용하는 것이 count()그들이 내 경험에 더 일반적입니다, 따라서 말을 코드를 읽고 적은 개발자의 원인이되므로, 동일한 경우 " sizeof(), 즉 무엇인가?" 문서를 참조해야합니다.

sizeof()C에서와 같이 작동하지 않는다는 것을 의미한다고 생각합니다 (데이터 유형의 크기 계산). 아마 PHP는 C로 작성 명시 때문에 언급을했고, C 기능 (대한 동일한 이름의 래퍼를 많이 제공 strlen(), printf()등)


92

phpbench 에 따르면 :

루프 길이를 미리 계산하는 것이 가치가 있습니까?

//pre-calculate the size of array
$size = count($x); //or $size = sizeOf($x);

for ($i=0; $i<$size; $i++) {
    //...
}

//don't pre-calculate
for ($i=0; $i<count($x); $i++) { //or $i<sizeOf($x);
    //...
}

1 바이트 값을 가진 1000 개의 키가있는 루프가 제공됩니다.

                  +---------+----------+
                  | count() | sizeof() |
+-----------------+---------+----------+
| With precalc    |     152 |      212 |
| Without precalc |   70401 |    50644 |
+-----------------+---------+----------+  (time in µs)

그래서 개인적 으로 pre calc과 함께 sizeof () 대신 count () 를 사용하는 것을 선호합니다 .


3
시간이 덜 걸리는 부분 만 알려주십시오. 그렇지 않으면 대답은 매우 복잡하고 혼란 스러울 수 있습니다! 감사합니다
Pratik

6
어떤 버전의 PHP로 테스트 했습니까? 최신 버전에는 많은 최적화가있어 결과가 크게 달라질 수 있습니다.
John Hunt

4
변수에 결과를 저장하지 않고 sizeof가 더 빠른 이유는 무엇입니까? 그렇지 않으면 다른 방법입니까? 이것은 PHP 인터프리터에서 선택적인 오버 헤드를 일으키는 나쁜 디자인 선택입니까? 나는 당신이 이것을 어떻게 벤치마킹했는지 알고 싶습니다. 마이크로 초 측정은 저를 걱정합니다. 아마도 외부 for 루프 에서이 작업을 엄청나게 많이 시도해보십시오.
FluorescentGreen5 5

1
"pre calc"는 무슨 뜻입니까?
rubo77

1
@ rubo77 위 코드를보십시오; "사전 계산"은 for- 루프 전에 배열의 크기를 한 번 결정하는 것입니다. "pre-calc"가 없으면 for-loop 내부의 배열 크기를 결정합니다
RobIII

38

그들은에 따라 동일 sizeof()

"빠른"에 대해 걱정할 이유가없는 경우 항상 인간을 위해 최적화하십시오. 인간 독자에게는 어떤 의미가 있습니까?


19

웹 사이트에 따르면 sizeof()의 별칭은 count()동일한 코드를 실행해야합니다. 아마도 sizeof()그것을 해결해야하기 때문에 약간의 오버 헤드가 count()있습니까? 그래도 매우 작아야합니다.


53
글쎄, 추측해서 미안해? 나는 그들이 실제로 같은 것이라고 진술했다. 그런 다음 실제 함수 대신 함수에 별칭을 사용하면 속도가 매우 느려질 수 있지만 논리적으로 "아마도"라는 단어를 사용하여 미리 알 수 없음을 인정했습니다. 그게 당신을 화나게했다면 죄송합니다. 다음에 나는 "무한"이라는 단어를 사용할 것입니다.
Andy Groff

8

나는 이것이 오래되었다는 것을 알고 있지만 PHP 7.2로 이것을 시도 했다고 언급하고 싶었습니다 .

<?php
//Creating array with 1 000 000 elements
$a = array();
for ($i = 0; $i < 1000000; ++$i)
{
    $a[] = 100;
}

//Measure
$time = time();
for ($i = 0; $i < 1000000000; ++$i)
{
    $b = count($a);
}
print("1 000 000 000 iteration of count() took ".(time()-$time)." sec\n");

$time = time();
for ($i = 0; $i < 1000000000; ++$i)
{
    $b = sizeof($a);
}
print("1 000 000 000 iteration of sizeof() took ".(time()-$time)." sec\n");
?>

결과는 다음과 같습니다.

1 000 000 000 iteration of count() took 414 sec
1 000 000 000 iteration of sizeof() took 1369 sec

그냥 사용하십시오 count().


이건 재미 있네. 어떤 PHP 버전을 사용하십니까?
waza

@waza 나는 PHP 7.2 사용하고 있습니다
메디 Bounya

1
PHP 7.3.3으로 : 1 000 000 000 iteration of count() took 525 sec 1 000 000 000 iteration of sizeof() took 1361 sec
AnthonyB


-2

count 함수를 사용하십시오. 요소의 배열을 세는 방법의 예는 다음과 같습니다.

$cars = array("Volvo","BMW","Toyota");
echo count($cars);

count()함수는 배열의 요소 수를 반환합니다.

sizeof()함수는 배열의 요소 수를 반환합니다.

sizeof()기능의 별칭입니다 count()기능.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.