⊗ppSpOtAU 82 of 83 menu

PHP တွင် မလိုအပ်သော array များကို အိုက်တီမိုက်ဆေးရှင်းခြင်း

ဆော့ဝဲရေးသားသူတစ်ဦးသည် 1 မှ 100000000 အထိ ကိန်းပြည့်များ၏ ပေါင်းလဒ်ကို ရှာရန်တာဝန် ရှိတယ်ဆိုပါစို့။

ကျွန်ုပ်တို့၏ ဆော့ဝဲရေးသားသူသည် ဤပြဿနာကို အောက်ပါအတိုင်း ကျွမ်းကျင်စွာ ဖြေရှင်းခဲ့သည်။

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

လှပသောဖြေရှင်းချက် မဟုတ်လား? စာကြောင်းတစ်ကြောင်းတည်းနဲ့ အရာအားလုံးပါဝင်တယ်။ သို့သော် ၎င်းသည် အလုပ်မလုပ်ပါ။ ဤကုဒ်ကို လက်တွေ့အလုပ်လုပ်ကြည့်ပါက မှတ်ဉာဏ်အလွန်အကျွံတောင်းဆိုမှုအတွက် အမှားကို ဖော်ပြလိမ့်မည်။

ဟမ်၊ 100000000 ဆိုတာ အများကြီးမဟုတ်ဘူးလား? သို့မဟုတ် အများကြီးလား? တွက်ကြည့်ရအောင်။ range function သည် 100000000 ကိန်းများပါသော array တစ်ခုကို ဖန်တီးပေးသည်။ PHP သည် ကိန်းတစ်ခုအတွက် 2 ဘိုက်နေရာယူမည်ဟု ဆိုကြပါစို့ - ထို့နောက် ကျွန်ုပ်တို့၏ array ကိုသိမ်းဆည်းရန် 200000000 ဘိုက်၊ ဆိုလိုသည်မှာ RAM မီဂါဘိုက် 200 ခန့် လိုအပ်မည်။

သို့သော် တကယ်တော့ PHP တွင် array သိမ်းဆည်းရာတွင် အလွန်ကြီးမားသော စရိတ်စကများ ရှိနေသောကြောင့် RAM ကို ပိုမိုလိုအပ်မည်ဖြစ်သည်။ ဥပမာအားဖြင့်၊ အမှားစာသားတွင် ကျွန်ုပ်သည် 4294967304 ဘိုက် - ဂီဂါဘိုက် 4 ခန့် ခွဲဝေရန် ကြိုးစားနေကြောင်း ဖော်ပြထားသည်။

ယခု အမှားဖြစ်ရသည့် အကြောင်းရင်းကို နားလည်ပါပြီ - ကျွန်ုပ်တို့သည် ခွင့်ပြုထားသော မှတ်ဉာဏ် ကန့်သတ်ချက်ကို သိသိသာသာ ကျော်လွန်နေသည်။

ကျွန်ုပ်တို့၏ စကရစ်ကို RAM ကို သိပ်မသုံးသော အခြားစနစ်သို့ ပြန်ရေးရန် မခက်ခဲပါ။

<?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МакедонскиMelayuNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
ဝက်ဘ်ဆိုက် လုပ်ဆောင်ခြင်း၊ ဆန်းစစ်လေ့လာခြင်းနှင့် ပုဂ္ဂလိကပြုပြင်ခြင်းအတွက် ကျွန်ုပ်တို့သည် cookie များကို အသုံးပြုပါသည်။ ဒေတာများကို ပြုပြင်ခြင်းသည် ကိုယ်ရေးကိုယ်တာ မူဝါဒအတိုင်း ဖြစ်ပါသည်။
အားလုံးလက်ခံရန် ပြင်ဆင်ရန် ငြင်းပယ်ရန်