⊗ppSpOtAU 82 of 83 menu

Optimizimi i vargjeve të panevojshme në PHP

Le të themi se një programues ka përpara detyrën të gjejë shumën e numrave të plotë nga 1100000000.

Programuesi ynë shkroi një zgjidhje elegante për këtë detyrë, si më poshtë:

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

Zgjidhje e bukur, apo jo? Në një rresht dhe gjithçka. Por nuk funksionon! Provoni të ekzekutoni këtë kod dhe ai do të shfaqë në ekran një gabim se keni kërkuar shumë kujtesë operative.

Hmm, 100000000 duket jo aq shumë? Apo është shumë? Le të llogarisim. Funksioni range krijon një varg me 100000000 numra. Le të supozojmë se PHP ndan 2 bajt për një numër - atëherë për të ruajtur vargun tonë do të nevojiten 200000000 bajt, domethënë rreth 200 megabajt kujtesë operative.

Por në fakt do të nevojitet shumë më e madhe kujtesë operative për shkak të faktit se PHP ka shpenzime shumë të mëdha overhead kur ruan një varg. Për shembull, në tekstin e gabimit tim, më tregon se po përpiqem të ndaj 4294967304 bajt - rreth 4 gigabajt!

Është e qartë tani pse del gabimi - ne kemi tejkaluar larg limitin e lejuar të kujtesës.

Nuk është aq e vështirë ta rishkruajmë skriptin tonë në një tjetër, që praktikisht nuk konsumon kujtesë operative:

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

Ose më mirë përdorim zgjidhjen matematikore:

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

Një programues kishte përpara detyrën të gjejë faktorielin e një numri të caktuar. Ai e zgjidhi atë si më poshtë:

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

Shpjegoni, çfarë nuk shkon me këtë kod. Rindërtoni kodin në një mënyrë më optimale.

Një programues kishte përpara detyrën të gjejë numrin e shifrave me të cilat mund të shkruhen të gjithë numrat e plotë nga 11000000. Ai e zgjidhi atë si më poshtë:

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

Shpjegoni, çfarë nuk shkon me këtë kod. Rindërtoni kodin në një mënyrë më optimale.

Një programues kishte përpara detyrën të gjejë numrin e numrave që pjesëtohen pa mbetje me 7, që ndodhen në një interval të caktuar. Ai e zgjidhi atë si më poshtë:

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

Shpjegoni, çfarë nuk shkon me këtë kod. Rindërtoni kodin në një mënyrë më optimale.

Një programues kishte përpara detyrën të gjejë shumën e pjesëtuesve të një numri. Ai e zgjidhi atë si më poshtë:

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

Shpjegoni, çfarë nuk shkon me këtë kod. Rindërtoni kodin në një mënyrë më optimale.

Shqip
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ne përdorim cookie për funksionimin e sajtit, analizën dhe personalizimin. Përpunimi i të dhënave bëhet në përputhje me Politikën e Privatësisë.
prano të gjitha konfiguro refuzo