Array PHP: count sau sizeof? (Programare, Php)

Ben a intrebat.

Pentru a afla numărul de elemente dintr-un array PHP $array, , care este mai rapid/mai bun/mai puternic?

count($array) sau sizeof($array) ?

Editează

Mulțumită lui Andy Lester, mi-am rafinat întrebarea pentru a mă referi la o perspectivă multilingvă. Comentariile din manual spun

„[sizeof] nu are aceeași semnificație în multe alte limbaje bazate pe C”

Este adevărat acest lucru?

Comentarii

    75

  • O referință la Daft Punk… 🙂 –  > Por Ben.
  • Foarte frumoasă întrebare. Dar iată un site de referință bun, care spune că sizeof este doar cu 21µs mai rapid –  > Por sinaneker.
8 răspunsuri
alex

Aș folosi count() dacă sunt identice, deoarece, din experiența mea, este mai comună și, prin urmare, va determina mai puțini dezvoltatori care vă citesc codul să spună „sizeof(), , ce este asta?” și să fie nevoiți să consulte documentația.

Cred că înseamnă sizeof() nu funcționează așa cum funcționează în C (calcularea dimensiunii unui tip de date). Probabil că a făcut această mențiune în mod explicit deoarece PHP este scris în C și oferă o mulțime de wrappers cu nume identice pentru funcții C (strlen(), , printf(), , etc.)

Reza Baradaran Gazorisangi

În conformitate cu phpbench:

Merită efortul de a calcula în prealabil lungimea buclei?

//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);
    //...
}

Se dă o buclă cu 1000 de chei cu valori de 1 octet.

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

Așa că eu personal prefer să folosesc count() în loc de sizeof() cu precalcul.

Comentarii

  • Vă rog să spuneți doar care dintre ele durează mai puțin. Altfel, răspunsul este destul de complicat și confuz și el! Mulțumiri.  > Por Pratik.
  • cu ce versiune de php ați testat? Versiunile mai noi au o mulțime de optimizări care pot face ca aceste rezultate să fie destul de diferite –  > Por John Hunt.
  • De ce este sizeof mai rapid fără a salva rezultatul într-o variabilă, dar altfel este invers? Este aceasta o alegere proastă de proiectare în interpretorul php care cauzează un fel de suprasolicitare selectivă? Aș dori să știu cum ați evaluat acest lucru, măsurarea în microsecunde mă îngrijorează. poate încercați să rulați acest lucru de foarte multe ori într-o buclă exterioară for loop? –  > Por FluorescentGreen5.
  • Ce vrei să spui cu „pre calc”? –  > Por rubo77.
  • @rubo77 Vezi codul de mai sus; „pre-calc” determină dimensiunea matricei o singură dată, înainte de bucla for. Fără „pre-calc” se determină dimensiunea tabloului în interiorul buclei for-loop – -.  > Por RobIII.
Andy Lester

Acestea sunt identice, în conformitate cu sizeof()

În absența oricărui motiv de îngrijorare cu privire la „mai rapid”, optimizați întotdeauna pentru om. Care are mai mult sens pentru cititorul uman?

Andy Groff

Conform site-ului web, sizeof() este un pseudonim al lui count(), , deci ar trebui să ruleze același cod. Poate că sizeof() are un pic de supraîncărcare, deoarece trebuie să rezolve la count()? Totuși, ar trebui să fie foarte mic.

Comentarii

    55

  • Ei bine, îmi pare rău că am ghicit? Eu doar precizam că sunt de fapt același lucru. Apoi, am făcut o deducție logică potrivit căreia utilizarea unui alias pentru o funcție în locul funcției reale ar putea fi foarte puțin mai lentă, dar am recunoscut că nu am nicio idee, prefațând-o cu cuvântul „poate”. Îmi pare rău dacă v-am jignit. Poate data viitoare voi folosi cuvântul „infinitezimal”. –  > Por Andy Groff.
Spoody

Știu că e veche, dar am vrut doar să menționez că Am încercat asta cu 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
");

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

și rezultatul a fost:

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

Deci, utilizați doar count().

Comentarii

  • Acest lucru este interesant. Ce versiune de PHP folosiți? –  > Por waza.
  • @waza Eu folosesc PHP 7.2 –  > Por Spoody.
  • Cu PHP 7.3.3.3 : 1 000 000 000 iteration of count() took 525 sec 1 000 000 000 iteration of sizeof() took 1361 sec –  > Por AnthonyB.
  • cu PHP 7.0 și cu o mașină ubuntu 1 000 000 000 iteration of count() took 38 sec 1 000 000 000 iteration of sizeof() took 46 sec –  > Por Gufran Hasan.
Mina Ragaie

sizeof() este doar un alias al lui count()așa cum se menționează aici

http://php.net/manual/en/function.sizeof.php

Comentarii

  • +alex da, așa este. Văd două linkuri. Te așteptai să rescrie sizeof ? LOL :p –  > Por Gogol.
Kashif Solangi

Ambele sunt folosite pentru a număra elementele dintr-o matrice. funcția sizeof() este un alias al funcției count() folosită în PHP. Cu toate acestea, funcția count() este mai rapidă și mai untiformă decât sizeof().

Harish Rana

Vă rugăm să folosiți funcția count, Iată un exemplu de numărare a matricei într-un element

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

count() returnează numărul de elemente dintr-un array.

sizeof() returnează numărul de elemente dintr-o matrice.

Funcția sizeof() este un alias al funcției count() funcție.

Tags: