PHP တွင် array_diff () သည် arrays နှင့် return ကွဲပြားခြားနားမှုများကိုနှိုင်းယှဉ်ရန်အလွန်လက်တွေ့ကျသောလုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ ၎င်းသည်တန်ဖိုးများကိုပထမခင်းကျင်းရေးတွင်ဒြပ်စင်များကိုရှာဖွေရန်နှင့်နှိုင်းယှဉ်လျှင်အခြားခင်းကျင်းမှုများတွင်မပါ 0 င်ပါ။ ၎င်းသည် strings and integers များပြုပြင်ခြင်းနှင့် ပတ်သက်. ပြ a နာမဟုတ်ပါ, သို့သော် floating-point array များနှင့်ဆက်ဆံရာတွင် "မမျှော်လင့်သော" အပြုအမူအချို့သည်ရေပေါ်အမှတ်အသားများကြောင့်ဖြစ်ပေါ်လာနိုင်သည်။
ရိုးရှင်းသောဥပမာတစ်ခုဖြင့်စတင်ကြပါစို့။
<?php
$a = [1.1, 2.2, 3.3];
$b = [2.2, 3.3];
$result = array_diff($a, $b);
print_r($result);
output ကို:
Array
(
[0] => 1.1
)
ဤရလဒ်သည်မျှော်လင့်ချက်များနှင့်အညီဖြစ်သည်။ သို့သော်အချို့ဖြစ်ရပ်များတွင် floating point number များသည်တိကျသောကန့်သတ်ချက်များကြောင့် array_diff () ကိုနှိုင်းယှဉ်ခြင်းတွင်အမှားအယွင်းများကိုဖြစ်ပေါ်စေနိုင်သည်။
Floating-point နံပါတ်များသည်ကွန်ပျူတာများတွင်အချို့သောဒ dec မကိန်းများကိုတိကျစွာ ကိုယ်စားပြု. မရပါ, အမှားအယွင်းများအနည်းငယ်သာရှိနိုင်သည်။ ဥပမာအားဖြင့်:
<?php
$a = [0.1 + 0.2]; // အမှန်တကယ်တန်ဖိုးဖြစ်ပါတယ် 0.30000000000000004
$b = [0.3];
$result = array_diff($a, $b);
print_r($result);
output ကို:
Array
(
[0] => 0.30000000000000004
)
0.1 + 0.2 == 0.3 ကို သင်စဉ်းစားမိနိုင်သည်။ သို့သော်ကွန်ပျူတာအတွင်းရှိ binary floating point ကိုယ်စားပြုမှုသည်ဤညီမျှခြင်းကိုအမြဲတမ်းမမှန်ကန်ပါ။ ဆိုလိုသည်မှာ array_diff () သည် တန်ဖိုးနှစ်ခုကို မျှမတူညီသော တန်ဖိုးနှစ်ခုကိုစဉ်း စား. အနှောင့်အယှက်ဖြစ်စေနိုင်သည်။
နောက်ခံအလွှာ ၏နောက်ခံအလွှာသည်တန်ဖိုးနှစ်ခုသည်တန်းတူရှိမရှိဆုံးဖြတ်ရန်အတွက်နှိုင်းယှဉ်နှိုင်းယှဉ်ခြင်း ( == ) ကိုအခြေခံသည်။ သို့သော် floating-point နံပါတ်များ၏တိကျမှန်ကန်မှုပြ problem နာသည်နံပါတ်နှစ်ခုသည်ယုတ္တိနည်းတူညီမျှခြင်းကိုဆိုလိုသည်,
ဘဏ် data ာရေးဆိုင်ရာအချက်အလက်များ, အာရုံခံကိရိယာအချက်အလက်များသို့မဟုတ် တိ ကျသောတွက်ချက်မှုလိုအပ်သည့်အခြားစီးပွားရေးလုပ်ငန်းများအတွက်,
ဒေတာတည်ရှိမှုရှိမရှိမှားယွင်းစွာခွဲခြားသတ်မှတ်
စီးပွားရေးတရားသဖြင့်စီရင်ဌာနမှယုတ္တိအမှားများ
ဒေတာကွဲပြားခြားနားမှုများကိုမှန်ကန်စွာတစ်ပြိုင်တည်းချိန်ကိုက်ခြင်းသို့မဟုတ်နှိုင်းယှဉ်နိုင်ခြင်းမရှိပါ
၎င်းသည်ကုဒ် bug တစ်ခုသာမက စီးပွားရေးလုံခြုံရေးပြ issue နာ ဖြစ်နိုင်သည်။
PHP သည် array_udiff () ကိုထောက်ပံ့ပေးသည်။
<?php
function float_compare($a, $b) {
$epsilon = 0.00001; // တိကျမှန်ကန်မှုသည်းခံမှု
if (abs($a - $b) < $epsilon) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$a = [0.1 + 0.2];
$b = [0.3];
$result = array_udiff($a, $b, 'float_compare');
print_r($result);
output ကို:
Array
(
)
ဤအချိန်, array_udiff () နှစ်ခုသည်တန်းတူဖြစ်သည့်ပြ problems နာများကြောင့်ဖြစ်ပေါ်လာသောပြ problems နာများကိုရှောင်ရှားခြင်း,
array_udiff () သို့မဟုတ်စိတ်ကြိုက်လုပ်ဆောင်ချက်များကိုမသုံးနိုင်သည့်အခါ floating point နံပါတ်များကို format လုပ်ရန် "က curv လုပ်ခြင်း" နည်းလမ်းတစ်ခုလည်းရှိသည်။
$a = array_map(function($v) {
return round($v, 5);
}, [0.1 + 0.2]);
$b = array_map(function($v) {
return round($v, 5);
}, [0.3]);
$result = array_diff($a, $b);
print_r($result);
ဤနည်းလမ်းသည်တိကျမှန်ကန်မှုကြောင့်ဖြစ်ပေါ်လာသောပြ problems နာအများစုကိုထိရောက်စွာရှောင်ရှားနိုင်သော်လည်းသတိနှင့်အသုံးပြုရန်လိုအပ်နေဆဲဖြစ်သည်။
floating point arrays ကိုသုံးရန် array_diff () ကိုအသုံးပြုသောအခါအထူးဂရုပြုမှုကိုအထူးဂရုပြုသင့်သည်, အထူးသဖြင့်တိကျမှန်ကန်မှုအမှားများအပေါ်သက်ရောက်မှုကိုအထူးဂရုပြုသင့်သည်။ အကယ်. floating-point နံပါတ်များကိုတိုက်ရိုက်နှိုင်းယှဉ်လျှင်၎င်းသည်ယုတ္တိရှိသောအမှားများနှင့်လုံခြုံရေးဆိုင်ရာအန္တရာယ်များကိုပင်ဖြစ်ပေါ်စေနိုင်သည်။ အချက်အလက်တိကျမှန်ကန်မှုကိုသေချာစေရန်အတွက် array_udiff () ကို စိတ်ကြိုက်တိကျသောတိကျမှုနှင့်နှိုင်းယှဉ်လျှင်အသုံးပြုခြင်းသို့မဟုတ်အချက်အလက်များကိုစည်းလုံးညီညွတ်စွာလုပ်ဆောင်ရန်အကြံပြုသည်။
အရေးကြီးသောအချက်အလက်များပါ 0 င်သောစီးပွားရေးလုပ်ငန်းများတွင်မဆိုအသေးစားအမှားအယွင်းများကိုလျစ်လျူရှုသင့်သည်။