⊗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 истифода мебарем. Коркарди маълумот мувофиқи Сиёсати махфият сурат мегирад.
ҳамаро қабул кардан танзим кардан рад кардан