⊗ppSpOtAU 82 of 83 menu

Uboreshaji wa Arrays Zisizohitajika katika PHP

Acha mprogrammer fulani anakabiliwa na kazi ya kupata jumla ya namba kamili kutoka 1 hadi 100000000.

Mprogrammer wetu aliandika suluhisho zuri la kazi hii, kama ifuatavyo:

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

Suluhisho zuri, sivyo? Katika mstari mmoja na yote hayo. Lakini halifanyi kazi! Jaribu kuendesha code hii na itakosa na kuonyesha hitilafu kwamba umeomba kumbukumbu ya kijani sana.

Hmm, 100000000 inaonekana sio nyingi sana? Au ni nyingi? Wacha tuhesabu. Function range inaunda array yenye 100000000 namba. Acha PHP itoe 2 bytes kwa kila namba - basi kuhifadhi array yetu itahitaji 200000000 byte, yaani takriban 200 megabaiti za kumbukumbu.

Lakini kwa kweli kumbukumbu itahitajika zaidi kutokana na ukweli kwamba PHP ina gharama kubwa za ziada wakati wa kuhifadhi array. Kwa mfano, kwenye maandishi yangu hitilafu inasema, kuwa ninajaribu kutenga 4294967304 byte - takriban 4 gigabaiti!

Inaeleweka sasa, kwa nini hitilafu inatokea - tumetoka nje ya kikomo cha kumbukumbu kilichoruhusiwa.

Sio ngumu kuandika upya script yetu kwa njia nyingine, isiyotumia kumbukumbu nyingi:

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

Au bora zaidi tunatumia suluhisho la kihisabati:

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

Mprogrammer fulani alikabiliwa na kazi ya kupata factorial ya namba fulani. Aliitatua kama ifuatavyo:

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

Eleza, nini kibaya na code hii. Badilisha code kuwa bora zaidi.

Mprogrammer fulani alikabiliwa na kazi ya kupata idadi ya tarakimu, ambazo zinaweza kutumika kuandika namba zote kamili kutoka 1 hadi 1000000. Aliitatua kama ifuatavyo:

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

Eleza, nini kibaya na code hii. Badilisha code kuwa bora zaidi.

Mprogrammer fulani alikabiliwa na kazi ya kupata idadi ya namba, zinazogawanyika bila baki kwa 7, zilizo kwenye muda maalum. Aliitatua kama ifuatavyo:

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

Eleza, nini kibaya na code hii. Badilisha code kuwa bora zaidi.

Mprogrammer fulani alikabiliwa na kazi ya kupata jumla ya vigawanyiko vya namba. Aliitatua kama ifuatavyo:

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

Eleza, nini kibaya na code hii. Badilisha code kuwa bora zaidi.

Kiswahili
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Tunatumia kuki kwa ajili ya uendeshaji wa tovuti, uchambuzi na ubinafsishaji. Usindikaji wa data unafanyika kulingana na Sera ya Faragha.
kubali yote sanidi kataa