⊗ppSpOtAU 82 of 83 menu

Pengoptimuman Array Tidak Perlu dalam PHP

Katakan seorang pengaturcara mempunyai tugas untuk mencari hasil tambah integer dari 1 hingga 100000000.

Pengaturcara kami menulis penyelesaian yang elegan untuk tugas ini, seperti berikut:

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

Penyelesaian yang cantik, bukan? Hanya satu baris dan sebagainya. Tetapi ia tidak berfungsi! Cuba jalankan kod ini dan ia akan memaparkan ralat mengenai anda meminta terlalu banyak memori RAM.

Hmm, 100000000 seperti tidak banyak? Atau banyak? Mari kita kira. Fungsi range mencipta array dengan 100000000 nombor. Katakan PHP memperuntukkan 2 bait untuk setiap nombor - maka untuk menyimpan array kami, diperlukan 200000000 bait, iaitu sekitar 200 megabait memori RAM.

Tetapi sebenarnya, lebih banyak memori RAM diperlukan kerana PHP mempunyai perbelanjaan tambahan yang sangat besar ketika menyimpan array. Sebagai contoh, dalam teks ralat saya, ia mengatakan saya cuba memperuntukkan 4294967304 bait - sekitar 4 gigabait!

Sekarang jelas mengapa ralat berlaku - kita telah jauh melebihi had memori yang dibenarkan.

Tidak sukar untuk menulis semula skrip kami kepada yang lain, yang hampir tidak menggunakan memori RAM:

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

Atau lebih baik, gunakan penyelesaian matematik:

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

Seorang pengaturcara mempunyai tugas untuk mencari faktorial bagi nombor yang diberikan. Dia menyelesaikannya seperti berikut:

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

Terangkan, apa yang salah dengan kod ini. Tulis semula kod kepada versi yang lebih optimum.

Seorang pengaturcara mempunyai tugas untuk mencari bilangan digit yang boleh digunakan untuk menulis semua integer dari 1 hingga 1000000. Dia menyelesaikannya seperti berikut:

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

Terangkan, apa yang salah dengan kod ini. Tulis semula kod kepada versi yang lebih optimum.

Seorang pengaturcara mempunyai tugas untuk mencari bilangan nombor yang boleh dibahagi tanpa baki dengan 7, berada dalam julat yang diberikan. Dia menyelesaikannya seperti berikut:

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

Terangkan, apa yang salah dengan kod ini. Tulis semula kod kepada versi yang lebih optimum.

Seorang pengaturcara mempunyai tugas untuk mencari hasil tambah pembahagi nombor. Dia menyelesaikannya seperti berikut:

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

Terangkan, apa yang salah dengan kod ini. Tulis semula kod kepada versi yang lebih optimum.

Melayu
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Kami menggunakan kuki untuk operasi laman web, analisis dan personalisasi. Pemprosesan data dijalankan mengikut Polisi Kerahsiaan.
terima semua tataletak tolak