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.