⊗ppSpOtAU 82 of 83 menu

PHP-те қажетсіз массивтерді оңтайландыру

Бір программашының алдында 1-ден 100000000-ға дейінгі бүтін сандардың қосындысын табу мәселесі тұрсын.

Біздің программашы бұл мәселенің әдемі шешімін жасап шықты, мынау сияқты:

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

Әдемі шешім, солай емес пе? Бір жолда және т.б. Бірақ ол жұмыс істемейді! Осы кодты іске қосып көріңіз, сізге тым көп жад сұрағаныңыз туралы қате шығады.

Хм, 100000000 сандары тым көп емес сияқты? Әлде көп пе? Есептеп көрейік. range функциясы 100000000 саннан тұратын массив жасайды. PHP әр санға 2 байт бөледі деп алайық - онда біздің массивті сақтау үшін 200000000 байт, яғни шамамен 200 мегабайт жад қажет болады.

Бірақ шын мәнінде, жад PHP-те массивті сақтауға байланысты тым көп үстеме шығындар болғандықтан әлдеқайда көп қажет болады. Мысалы, менде қате 4294967304 байт бөлуге тырысқанымды көрсетеді - бұл шамамен 4 гигабайт!

Енді неге қате шығатыны түсінікті - біз рұқсат етілген жад шегінен асып кеттік.

Біздің скрипті басқаша, іс жүзінде жад тұтынбайтын нұсқаға қайта жазу оңай емес:

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

Немесе математикалық шешімді қолданайық:

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

Бір программашының алдында берілген санның факториалын табу мәселесі тұрды. Ол оны келесі түрде шешті:

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

Бұл кодта не дұрыс емес түсіндіріңіз. Кодты әлдеқайда оңтайлы нұсқаға өзгертіңіз.

Бір программашының алдында 1-ден 1000000-ға дейінгі барлық бүтін сандарды жазу үшін қанша цифр қажет екенін табу мәселесі тұрды. Ол оны келесі түрде шешті:

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

Бұл кодта не дұрыс емес түсіндіріңіз. Кодты әлдеқайда оңтайлы нұсқаға өзгертіңіз.

Бір программашының алдында берілген аралықта 7-ге қалдықсыз бөлінетін сандардың санын табу мәселесі тұрды. Ол оны келесі түрде шешті:

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

Бұл кодта не дұрыс емес түсіндіріңіз. Кодты әлдеқайда оңтайлы нұсқаға өзгертіңіз.

Бір программашының алдында санның бөлгіштерінің қосындысын табу мәселесі тұрды. Ол оны келесі түрде шешті:

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

Бұл кодта не дұрыс емес түсіндіріңіз. Кодты әлдеқайда оңтайлы нұсқаға өзгертіңіз.

Қазақ
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართული한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Біз сайттың жұмысы, аналитика және персонализация үшін cookie файлдарын қолданамыз. Деректерді өңдеу Құпиялылық саясаты бойынша жүреді.
барлығын қабылдау баптау қабылдамау