⊗ppSpOtAU 82 of 83 menu

Optimering av onödiga arrayer i PHP

Låt oss säga att en programmerare har i uppgift att hitta summan av heltal från 1 till 100000000.

Vår programmerare skrev en elegant lösning på detta problem, så här:

<?php echo array_sum(range(1, 100000000)); ?>

En vacker lösning, eller hur? På en rad och allt. Men den fungerar inte! Försök köra den här koden så kommer den att visa ett felmeddelande om att du har begärt för mycket minne.

Hmm, 100000000 verkar inte så mycket? Eller är det mycket? Låt oss räkna. Funktionen range skapar en array med 100000000 tal. Låt oss anta att PHP allokerar 2 byte per tal - då krävs det 200000000 byte för att lagra vår array, alltså ungefär 200 megabyte minne.

Men i verkligheten kommer det att krävas betydligt mer minne på grund av att PHP har mycket stora omkostnader vid lagring av arrayer. Till exempel, i mitt felmeddelande står det att jag försöker allokera 4294967304 byte - ungefär 4 gigabyte!

Nu är det förståeligt varför felet uppstår - vi har långt överskridit den tillåtna minnesgränsen.

Det är inte så svårt att skriva om vårt skript till ett annat, som nästan inte förbrukar något minne:

<?php $sum = 0; for ($i = 1; $i <= 100000000; $i++) { $sum += $i; } echo $sum; ?>

Eller ännu bättre använder vi en matematisk lösning:

<?php $n = 1000000; $sum = $n * ($n + 1) / 2; echo $sum; ?>

En programmerare hade i uppgift att hitta fakulteten av ett givet tal. Hen löste det på följande sätt:

<?php $n = 100; echo array_product(range(1, $n)); ?>

Förklara vad som är fel med den här koden. Skriv om koden till en mer optimal.

En programmerare hade i uppgift att hitta antalet siffror som krävs för att skriva alla heltal från 1 till 1000000. Hen löste det på följande sätt:

<?php echo strlen(implode('', range(1, 1000000))); ?>

Förklara vad som är fel med den här koden. Skriv om koden till en mer optimal.

En programmerare hade i uppgift att hitta antalet tal som är jämnt delbara med 7, inom ett givet intervall. Hen löste det på följande sätt:

<?php $arr = []; for ($i = 0; $i <= 1000; $i++) { if ($i % 7 == 0) { $arr[] = $i; } } echo count($arr); ?>

Förklara vad som är fel med den här koden. Skriv om koden till en mer optimal.

En programmerare hade i uppgift att hitta summan av en tals delare. Hen löste det på följande sätt:

<?php $num = 320; $divs = []; for ($i = 0; $i <= $num; $i++) { if ($num % $i == 0) { $divs[] = $i; } } echo array_sum($divs); ?>

Förklara vad som är fel med den här koden. Skriv om koden till en mer optimal.

Svenska
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi använder kakor för webbplatsens funktion, analys och personalisering. Behandling av data sker i enlighet med Integritetspolicyn.
acceptera alla anpassa avvisa