Sizeof PHP: velikost nizov in objektov, s čimer se skrajša čas izvedbe skript

Funkcija sizeof v php je vzdevek count (), count (), prejme število "ključev-vrednosti" matrike ali objekta. Obvezni parameter je niz ali objekt, neobvezen - druga vrednost je COUNT_RECURSIVE ali 1 (privzeta vrednost 0), če je nameščena, potem se zdi, da je rekurzivna.

PHP: Kako zmanjšati število iteracij v zanki in skrajšati čas izvedbe skripta?

Ker se count () in sizeof php pogosto uporabljata v zankah, ju je treba temeljito preučiti.

$ array = array (
"sadje" = & gt; polje (
"jabolko",
"banana",
"oranžno",
,
"zelenjava" => niz (
"krompir",
paradižnik,
)),
);

echo "Privzeto =" .sizeof ($ array); //Privzeto = 2
echo "Recursive =" .sizeof ($ array, 1); //Recursive = 7

Testiranje velikih nizov v zanki (več kot 65.000 predmetov) je pokazalo, da je sizeof () hitrejši od count (), zato ga je smiselno uporabiti v praksi.

& lt; skript async = "//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js">
& lt ;! - fb_336x280_1 - & gt;

& lt; skript & gt; (adsbygoogle = window.adsbygoogle || []). push ({});

V ciklih je vedno bolje zamenjati velikost php s spremenljivko, sicer bo velikost polja določena z vsako ponovitvijo, ki upočasni postopek.

$ test = array (123 4);
$ sizeof_test = sizeof ($ test);
za ($ it = 0; $ it echo $ test [$ it];
}

Če preskusite zanko pri 1000 enobajtnih vrednostih, je čas prehoda z vnaprej določeno spremenljivko manjši od 250 krat.

Razmislite matriko z ničelnimi vrednostmi:

$ test2 = array (", null," false ", 0);
var_dump (sizeof ($ test2) ////izhod int

var_dump (sizeof (array_filter ($ test2))); //izhod int

Kot je razvidno iz primera, velikost php (in count) tudi)upoštevajte število elementov, vključno z ničlo, zato je treba upoštevati in (če je potrebno) izbrisati prazne vrednosti z uporabo array_filter ali druge uporabniške funkcije.

& lt; skript async = "//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js">
& lt ;! - fb_336x280_2 - & gt;

& lt; skript & gt; (adsbygoogle = window.adsbygoogle || []). push ({});

Dodaj polje $ test2:

$ test2 = array (", nič," false ", 0 array ()); //print int 


$ test2 = array (", nič," false ", 0 array (null)); //bo natisnil int


var_dump (sizeof (array_filter ($ test2)));

V tem primeru je array_filter izbrisal vse prazne vrednosti enodimenzionalnega niza, vendar ta funkcija nima rekurzivnega dejanja, zato je vrednost "null" "notranjega" polja levo, kar pomeni, da jo upošteva velikost php.

Poglejmo, kaj se zgodi, če odstranite array_filter?

​​
$ test2 = array (", nič," false ", 0 array ()); //output int 
$ test2 = array (", nič, "false" , 0 polje (nič); //izhod int
$ t_rec = array (", nič," false ", 0 array ()); //output int
$ t_rec = array (", zero, "false) ', 0 polje (null)); //izhod int

var_dump (sizeof ($ test2));
var_dump (sizeof ($ t_rec, 1));

Če prazne niso bile namerno vnesene v kodo, jih je bolje odstraniti s pomočjo filtrirnih funkcij pred zagonom zanke. Tako boste odstranili dodatne iteracije cikla in skrajšali čas za izvedbo postopka.

Kako izračunati objekt StdClass, ustvarjen z json_decode z uporabo velikosti php?

$ json = '{' foo ': bar, številka: 10, avto: BMW}';
$ stdInstance = json_decode ($ json);
var_dump (sizeof ((array) $ stdInstance)); //bo natisnil int

var_dump (sizeof (get_object_vars ($ stdInstance))); //output int


Sizeof () definira število elementov matrike ali objekta Countable. StdClass ni niti ena niti druga. Če želite dobiti predmet v obliki matrike,uporabite funkcijo get_object_vars. Prva možnost (array) deluje tudi, vendar se zdi, da je druga možnost bolj zanesljiva.
Get_object_vars se uporabljajo za pridobivanje ne-statičnih lastnosti objekta, ki je popolnoma primeren za naš primer.

Sorodne publikacije