PHP တွင် Array_diff () သည်နှစ်ခုသို့မဟုတ်နှစ်ခုထက်ပိုသော array နှင့်နှိုင်းယှဉ်သောတန်ဖိုးများကိုဖော်ပြထားသည့်အရာတစ်ခုဖြစ်သည်။ ၎င်းသည်ရှုထောင့်များ array များအတွက်အလွန်ကောင်းသည်, သို့သော် "လည်ပင်း၌ခင်းကျင်းနေသော arrays" (i.e. elements) ကိုကိုင်တွယ်ရန်၎င်းကိုအသုံးပြုရန်ကြိုးစားသောအခါ, သင်ထင်သလောက်မလွယ်ကူကြောင်းသင်တွေ့လိမ့်မည်။
array_diff () ၏တရားဝင်အဓိပ္ပါယ်ဖွင့်ဆိုချက်သည် "တန်ဖိုးများ" ကိုနှိုင်းယှဉ်ရန်နှင့်ပထမခင်းကျင်းမှုတွင်တည်ရှိခဲ့သောထို "တန်ဖိုးများ" ကိုနှိုင်းယှဉ်ရန်ဖြစ်သည်။ ရိုးရှင်းတဲ့ရှုထောင်ခင်းကျင်းဥပမာပေးကြပါစို့။
$a = ['apple', 'banana', 'cherry'];
$b = ['banana', 'dragonfruit'];
$result = array_diff($a, $b);
// ဝင်သည် ['apple', 'cherry']
၎င်းသည်အလွန်ရိုးရှင်းသော်လည်းသော့များမည်သို့ပင်ရှိပါစေတန်ဖိုးများကိုသာနှိုင်းယှဉ်နိုင်သည်။ သို့သော်ကျွန်ုပ်တို့သည်အသိုက်ခင်းကျင်းမှုကိုအစားထိုးလျှင်ရလဒ်သည်ကွဲပြားလိမ့်မည်။
အောက်ပါဥပမာကိုကြည့်ရအောင်။
$a = [
['id' => 1, 'name' => 'Alice'],
['id' => 2, 'name' => 'Bob']
];
$b = [
['id' => 2, 'name' => 'Bob']
];
$result = array_diff($a, $b);
သင် ['ID' = >> 1, 'alice' => 'Alice'] ပြန်လာရန်အတွက် ဒေါ်လာရလဒ်ကို သင်မျှော်လင့်နိုင်သည် ။ PHP သည် PHP ကို အသုံးပြု. internals များကို array များနှင့်နှိုင်းယှဉ်သောအခါတန်ဖိုးများကိုနှိုင်းယှဉ်ရန်အတွက်ပြည်တွင်း၌ထည့်သွင်းရန်နှင့်အသိုက်ခင်းကျင်းမှု၏နှိုင်းယှဉ်မှုနည်းလမ်းသည်သင်ထင်သည့်အတိုင်း "Smart" မဟုတ်ပါ။
array_diff () array သည်ခင်းကျင်းသည့်အခါအတွင်းရှိ array များဖြစ်စဉ်များသည် array များရှိသည့်အခါ၎င်း၏အတွင်းပိုင်းယန္တရားသည်ပြန်လည်ထူထောင်ရေးလုပ်ငန်းစဉ်ကိုမလုပ်ဆောင်နိုင်သော်လည်း Subarray တစ်ခုလုံးကိုတန်ဖိုး "အဖြစ်ဆက်ဆံခြင်းနှင့် string type ကိုနှိုင်းယှဉ်ကြည့်ရှုရန်ကြိုးစားသည်။ Subarray ၏ဖွဲ့စည်းပုံသည်အနည်းငယ်မျှကိုက်ညီမှုရှိကြောင်းနှင့်ကွဲပြားခြားနားသောကွဲပြားခြားနားသောအဓိကအမိန့်ကဲ့သို့) သည်အနည်းငယ်မျှသာတန်ဖိုးများအဖြစ်မှတ်ယူလိမ့်မည်။
အသိုက် array များကိုမှန်ကန်စွာနှိုင်းယှဉ်နိုင်ရန်အတွက် array item ၏ contents ကို item မှအကြောင်းအရာများကိုနှိုင်းယှဉ်ရန်ထုံးစံ function ကိုရေးနိုင်သည်။
function array_diff_recursive($a, $b) {
$diff = [];
foreach ($a as $itemA) {
$found = false;
foreach ($b as $itemB) {
if ($itemA == $itemB) {
$found = true;
break;
}
}
if (!$found) {
$diff[] = $itemA;
}
}
return $diff;
}
$a = [
['id' => 1, 'name' => 'Alice'],
['id' => 2, 'name' => 'Bob']
];
$b = [
['id' => 2, 'name' => 'Bob']
];
$result = array_diff_recursive($a, $b);
// ပြန်လာ [['id' => 1, 'name' => 'Alice']]
array_udiff () သည် ရှုပ်ထွေးသောအဆောက်အအုံများကိုနှိုင်းယှဉ်သောအခါအထူးသဖြင့်အသုံးဝင်သောစိတ်ကြိုက်နှိုင်းယှဉ်မှု function ကိုပေးရန်ခွင့်ပြုသည်။
function compare_nested_array($a, $b) {
return $a == $b ? 0 : 1;
}
$result = array_udiff($a, $b, 'compare_nested_array');
ဤနည်းလမ်းသည်သင့် အား နှိုင်းယှဉ်မှုယုတ္တိဗေဒကိုစိတ်ကြိုက်ပြုပြင်ရန်ခွင့်ပြုသည် ။
အကယ်. သင်သည်အချက်အလက်အမြောက်အများကိုလုပ်ဆောင်ပါက subarray တစ်ခုချင်းစီအတွက် hash ကိုထုတ်လုပ်နိုင်သည်။ ထို့နောက် hash နှင့်နှိုင်းယှဉ်နိုင်သည်။
function get_hash($array) {
return md5(json_encode($array));
}
$a_hashed = array_map('get_hash', $a);
$b_hashed = array_map('get_hash', $b);
$diff_keys = array_diff($a_hashed, $b_hashed);
$result = [];
foreach ($diff_keys as $key => $hash) {
$result[] = $a[$key];
}
ဤနည်းသည်ကြီးမားသောအချက်အလက်ပမာဏနှင့်အတူဖြစ်ရပ်များအတွက်သင့်လျော်သည်။ ၎င်းသည်စွမ်းဆောင်ရည်ကောင်းရုံသာမကရှုပ်ထွေးသောအဆောက်အအုံများကိုကိုင်တွယ်နိုင်သည်။
ဥပမာအားဖြင့်, သင်သည်အသုံးပြုသူခွင့်ပြုချက်စာရင်းနှစ်ခုအကြားကွဲပြားခြားနားမှုများကိုနှိုင်းယှဉ်သော interface 0 န်ဆောင်မှုတစ်ခုကိုရေးဆွဲနေသည်။
$oldPermissions = [
['module' => 'user', 'access' => 'read'],
['module' => 'admin', 'access' => 'write'],
];
$newPermissions = [
['module' => 'user', 'access' => 'read'],
];
$removed = array_diff_recursive($oldPermissions, $newPermissions);
// ခွင့်ပြုချက်အပြောင်းအလဲများကိုသင့်အားသတိပေးရန်အုပ်ချုပ်ရေးမှူးထံအီးမေးလ်ပို့နိုင်သည်
သို့မဟုတ်သင် configuration version နှင့်ကိုင်တွယ်ဖြေရှင်းသည့်အခါ configuration item ကိုထည့်သွင်းခြင်းရှိမရှိဆုံးဖြတ်ရန်ဤနည်းလမ်းများကိုသင်အသုံးပြုနိုင်သည်။
Array_diff () သည်ရိုးရှင်းသောတပ်ဆင်မှုများနှင့်ဆက်ဆံရာတွင်အလွန်အစွမ်းထက်သော်လည်း၎င်းသည်အသိုက်ဖွဲ့စည်းပုံတစ်ခုသို့ 0 င်ရောက်သောအခါ၎င်းသည်မသမာပုံရသည်။ ကံကောင်းထောက်မစွာပင် PHP သည်အစွမ်းထက်သောကိရိယာများကိုအစွမ်းထက်သောကိရိယာများကိုထောက်ပံ့ပေးသည် ။
ကောင်းမွန်သောခင်းကျင်းနှိုင်းယှဉ်မှုယုတ္တိဗေဒကိုရေးခြင်းသည်အချက်အလက်အမှားများကိုရှောင်ရှားနိုင်ရုံသာမကစနစ်ကိုပိုမိုတည်ငြိမ်စေသည်။ Code ကိုပိုမိုအားကောင်းအောင်လုပ်ရန်ဤနည်းစနစ်များကိုအမှန်တကယ်စီမံကိန်းများတွင်သင်အသုံးပြုနိုင်မည်ဟုကျွန်ုပ်မျှော်လင့်ပါသည်။