<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 本文将探讨在 PHP 中如何结合 array_diff_ukey 和 array_map 来实现更复杂的数组键比较场景。</span></span><span>
</span><span><span class="hljs-comment">// array_diff_ukey 提供了自定义键比较的能力,而 array_map 则可以帮助我们对数据进行预处理,</span></span><span>
</span><span><span class="hljs-comment">// 两者结合能够解决一些仅靠单一函数无法处理的问题。</span></span><span>
</span><span><span class="hljs-comment">// --------------------------------------------</span></span><span>
在 PHP 的数组操作中,常见的函数如 `array_diff`、`array_diff_assoc`、`array_diff_key` 都提供了
对数组值或键的差集比较功能。然而,当我们需要在 **键的比较逻辑上引入自定义规则** 时,
`array_diff_ukey` 就显得非常有用。它允许开发者传入一个用户自定义的回调函数,来决定两个键
在比较时的先后关系。
例如,假设我们有两个数组:
```php
</span><span><span class="hljs-variable">$array1</span></span><span> = [
</span><span><span class="hljs-string">"User_01"</span></span><span> => </span><span><span class="hljs-string">"Alice"</span></span><span>,
</span><span><span class="hljs-string">"User_02"</span></span><span> => </span><span><span class="hljs-string">"Bob"</span></span><span>,
</span><span><span class="hljs-string">"User_03"</span></span><span> => </span><span><span class="hljs-string">"Charlie"</span></span><span>
];
</span><span><span class="hljs-variable">$array2</span></span><span> = [
</span><span><span class="hljs-string">"user_1"</span></span><span> => </span><span><span class="hljs-string">"Alice"</span></span><span>,
</span><span><span class="hljs-string">"user_4"</span></span><span> => </span><span><span class="hljs-string">"David"</span></span><span>
];
</span></span>
ပုံမှန်အားဖြင့် array_diff_ukey သည် "user_01" နှင့် "user_1" အကြားတူညီမှုကိုအသိအမှတ်မပြုပါ။
စီးပွားရေးယုတ္တိဗေဒကကျွန်ုပ်တို့ကိုနှိုင်းယှဉ်ဖို့လိုလျှင်ကျွန်ုပ်တို့ပေါင်းစပ်ရန်လိုအပ်သည်
Preprocessing အတွက် Array_map ။
Array keys များပေါ်တွင် "စံသတ်မှတ်ချက်" လုပ်ဆောင်ရန်အတွက် array_map နှင့် array_keys များကို သုံးနိုင်သည်။
<span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">normalizeKey</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$key</span></span></span><span>) {
</span><span><span class="hljs-comment">// underscore ကိုဖယ်ရှားခြင်းနှင့်စာလုံးအသေးကိုလှည့်ပါ</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">strtolower</span></span><span>(</span><span><span class="hljs-title function_ invoke__">str_replace</span></span><span>(</span><span><span class="hljs-string">"_"</span></span><span>, </span><span><span class="hljs-string">""</span></span><span>, </span><span><span class="hljs-variable">$key</span></span><span>));
}
</span><span><span class="hljs-variable">$normalized1</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_combine</span></span><span>(
</span><span><span class="hljs-title function_ invoke__">array_map</span></span><span>(</span><span><span class="hljs-string">"normalizeKey"</span></span><span>, </span><span><span class="hljs-title function_ invoke__">array_keys</span></span><span>(</span><span><span class="hljs-variable">$array1</span></span><span>)),
</span><span><span class="hljs-title function_ invoke__">array_values</span></span><span>(</span><span><span class="hljs-variable">$array1</span></span><span>)
);
</span><span><span class="hljs-variable">$normalized2</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_combine</span></span><span>(
</span><span><span class="hljs-title function_ invoke__">array_map</span></span><span>(</span><span><span class="hljs-string">"normalizeKey"</span></span><span>, </span><span><span class="hljs-title function_ invoke__">array_keys</span></span><span>(</span><span><span class="hljs-variable">$array2</span></span><span>)),
</span><span><span class="hljs-title function_ invoke__">array_values</span></span><span>(</span><span><span class="hljs-variable">$array2</span></span><span>)
);
</span></span>
ဤအချိန်တွင် ဒေါ်လာ၏သော့ နှင့် ပုံမှန် (ဒေါ်လာ) ၏သော့များသည် "underscore မပါဘဲစာလုံးအသေး" သို့တစ်ပုံစံတည်းပြောင်းပြောင်းလဲသွားသည်။
နောက်တစ်ခုကိုနှိုင်းယှဉ်ဖို့ array_diff_ukey ကို သုံးနိုင်တယ်။
<span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_diff_ukey</span></span><span>(</span><span><span class="hljs-variable">$normalized1</span></span><span>, </span><span><span class="hljs-variable">$normalized2</span></span><span>, function(</span><span><span class="hljs-variable">$a</span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">strcmp</span></span><span>(</span><span><span class="hljs-variable">$a</span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>);
});
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span></span>
output ရလဒ် -
<span><span>Array
(
[</span><span><span class="hljs-meta">user02</span></span><span>] => Bob
[</span><span><span class="hljs-meta">user03</span></span><span>] => Charlie
)
</span></span>
မြင်နိုင်သည့်အတိုင်း User_01 နှင့် User_1 ကို တူညီသောသော့များအဖြစ်အသိအမှတ်ပြုထားပြီးရလဒ်ကိုဖယ်ထုတ်ထားသည်။
array_map 's key standardization နှင့် array_diff_ukey 's Custom Conse Conse Conse Case Key ကိုနှိုင်းယှဉ်ခြင်း အားဖြင့်,
ကျွန်ုပ်တို့သည်ရှုပ်ထွေးသောသော့ကိုက်ညီသည့်ယုတ္တိဗေဒကိုကျွန်ုပ်တို့ကိုင်တွယ်နိုင်ပြီးအရာဝတ်ထုများကိုလျစ်လျူရှုခြင်း,
ပြင်ပဒေတာအရင်းအမြစ်များကိုကိုင်တွယ်သောအခါဤချဉ်းကပ်မှုသည်အထူးသဖြင့်အသုံးဝင်သည် (API ပြန်ပို့တန်ဖိုးများ, အသုံးပြုသူ uploads data data) ဤအချက်အလက်များအတွက်သော့ချက်များသည်အမြဲတမ်းပေါင်းစည်းသည့်ပုံစံဖြင့်မကြာခဏမဟုတ်ပါ။
ဤရွေ့ကားပြောင်းလွယ်ပြင်လွယ် function ကိုပေါင်းစပ်အယူအဆသည် code ၏ထိန်းသိမ်းမှုကိုတိုးတက်စေရုံသာမကပြောင်းလဲနိုင်သောဒေတာအဆောက်အအုံများနှင့်အလျင်အမြန်လိုက်လျောညီထွေရှိစေရန်ကျွန်ုပ်တို့အားလည်းလျင်မြန်စွာကူညီသည်။
<span></span>
သက်ဆိုင်သောတက်(ဂ်)များ:
array_map