تفاضل انجمنی کاربری (array_diff_uassoc)
«تفاضل انجمنی کاربری» یعنی پیدا کردن آیتم های متفاوت با توجه به «کلید (Key)» و «مقدار (Value)»؛ اما مقایسه کلید با «تابع دلخواه (User-defined Function)» انجام می شود. فرض کن دو دفتر نمره داری؛ نام دانش آموز کلید است و نمره مقدار. این تابع، تفاوت ها را برمی گرداند.
تعریف ساده و کاربرد تفاضل انجمنی کاربری
تابع array_diff_uassoc() کلیدها و مقدارها را مقایسه می کند. برای مقایسه «کلید»، از تابع خودت استفاده می کنی. خروجی، اعضایی از آرایه اول است که در بقیه آرایه ها نیستند.
اصطلاح: «تابع مقایسه» باید عدد منفی، صفر، یا مثبت برگرداند. این اعداد نشان می دهند آرگومان اول کوچک تر، برابر، یا بزرگ تر است.
سینتکس و پارامترها
سینتکس: array_diff_uassoc(array1, array2, array3, ..., myfunction). array1 منبع مقایسه است. array2 و بعدی ها آرایه های مرجع هستند. myfunction نام تابع مقایسه کلیدها است.
راهنمای کوتاه پارامترها
- array1: آرایه اصلی برای تفاضل.
- array2, array3,...: آرایه های مرجع.
- myfunction: تابع مقایسه کلید؛ باید عدد برگرداند.
مثال پایه: تفاضل با مقایسه کلید
در این مثال، کلیدها با تابع کاربری سنجیده می شوند. سپس آیتم های متفاوت از $a1 بازگردانده می شوند.
<?php
function myfunction($a, $b) {
if ($a === $b) {
return 0;
}
return ($a > $b) ? 1 : -1;
}
$a1 = array("a" => "red", "b" => "green", "c" => "blue");
$a2 = array("d" => "red", "b" => "green", "e" => "blue");
$result = array_diff_uassoc($a1, $a2, "myfunction");
print_r($result);
?>
مثال سه آرایه ای با تفاضل انجمنی کاربری
اینجا سه آرایه داریم. تابع، آیتم های متفاوت از $a1 را نسبت به $a2 و $a3 می یابد.
<?php
function myfunction($a, $b) {
if ($a === $b) {
return 0;
}
return ($a > $b) ? 1 : -1;
}
$a1 = array("a" => "red", "b" => "green", "c" => "blue");
$a2 = array("a" => "red", "b" => "green", "d" => "blue");
$a3 = array("e" => "yellow", "a" => "red", "d" => "blue");
$result = array_diff_uassoc($a1, $a2, $a3, "myfunction");
print_r($result);
?>
گام های عملی سریع
- آرایه پایه را آماده کن. کلیدها معنادار باشند.
- آرایه های مرجع را بساز. داده مقایسه را مشخص کن.
- تابع مقایسه کلید را بنویس. خروجی منفی/صفر/مثبت باشد.
array_diff_uassoc()را صدا بزن. نتیجه را بررسی کن.- اگر نتیجه خالی بود، تفاوتی براساس کلید و مقدار نیست.
نکات و خطاهای رایج درباره تفاضل انجمنی کاربری
- تابع مقایسه فقط برای «کلید» است؛ مقدارها معمولی سنجیده می شوند.
- نوع داده مهم است؛
"1"و1برای مقدار می تواند متفاوت باشد. - ترتیب آرایه ها مهم است؛ فقط از
array1خروجی می آید. - اگر تابع عدد برنگرداند، نتیجه نامعتبر می شود.
نکته: برای تفاوتِ فقط کلید، از array_diff_key استفاده کن. برای تفاوت انجمنی بدون تابع کاربری، array_diff_assoc را ببین.
جمع بندی سریع
- تفاضل انجمنی کاربری روی کلید و مقدار کار می کند.
- مقایسه کلید با تابع دلخواه انجام می شود.
- خروجی فقط از آرایه اول است.
- تابع باید منفی/صفر/مثبت برگرداند.
- ترتیب آرایه ها نتیجه را تغییر می دهد.