اشتراک انجمنی کاربری (array_intersect_uassoc)
وقتی می خواهیم هم کلید و هم مقدار را بسنجیم، اما شیوه سنجش کلید سفارشی باشد، از array_intersect_uassoc() استفاده می کنیم. «کاربری (User-defined)» یعنی تابع مقایسه کلید را خودت می نویسی.
تعریف و سازوکار
این تابع، کلیدها و مقدارهای چند آرایه را مقایسه می کند. سپس فقط ورودی های مشترک در همه آرایه ها را از array1 برمی گرداند. مقایسه کلید با تابعی است که خودت می دهی.
<?php
// نگارش کلی تابع
// array_intersect_uassoc(array1, array2, array3, ..., myfunction)
?>
پارامترها
- array1: آرایه پایه برای خروجی.
- array2,...: آرایه های مرجع برای مقایسه.
- myfunction: تابع مقایسه کلیدها. باید عدد منفی/صفر/مثبت بدهد.
مثال 1: کلید و مقدار، با مقایسه کلید سفارشی
تابع کاربری، کلیدها را مرتب سازی وار مقایسه می کند. سپس اشتراک انجمنی برگردانده می شود.
<?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_intersect_uassoc($a1, $a2, "myfunction");
print_r($result);
?>
مثال 2: سه آرایه با همان تابع کاربری
حالا سه آرایه داریم. فقط آیتم هایی می مانند که در هر سه یکی باشند.
<?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_intersect_uassoc($a1, $a2, $a3, "myfunction");
print_r($result);
?>
گام های عملی سریع
- آرایه پایه را مشخص کن. نامش
array1باشد. - آرایه های مرجع را آماده کن. کلیدها معنی دار باشند.
- تابع مقایسه کلید بنویس. خروجی اش منفی/صفر/مثبت باشد.
array_intersect_uassoc()را صدا بزن. خروجی را بررسی کن.
نکات و هشدارها
نکته: تابع کاربری فقط برای کلید استفاده می شود.
نکته: خروجی، عضوهای array1 را برمی گرداند.
هشدار: نوع ها مهم اند. از === در مقایسه کلید استفاده کن.
جمع بندی سریع
- اشتراک روی کلید و مقدار انجام می شود.
- کلیدها با تابع کاربری سنجیده می شوند.
- خروجی از
array1استخراج می شود. - برای کلیدها حساس به نوع باش.