در میان لیست بزرگی از توابع آرایه ای در php , در اینجا قصد دارم تعدادی از این توابع را برای یافتن تفاوت بین آرایه ها در php و ورودی های آرایه ها پیدا کنیم .می توانیم تفاوت آرایه ها را با استفاده از کلید (key) یا مقدار (value) آن ها پیدا کنیم.
بعضی از توابع یافتن تفاوت بین آرایه ها در php بصورت زیر هستند
Array_diff
Array_diff_key
Array_diff_assoc
از میان لیست توابع بالا , تفاورت بین آرایه ها می تواند بر اساس بررسی ایندکس (index) که توسط یک تابع سفارشی به عنوان callback استفاده می شود , بررسی شود . این توابع php بصورت زیر هستند:
Array_diff_ukey
Array_diff_uassoc
میتوانیم از لیست دیگری از توابع php برای یافتن تفاوت بین ورودی آرایه ها توسط مقایسه ورودی های آن ها که با استفاده از توابع callback (بازگشتی) که توسط کاربر تعریف شده اند , بهره ببریم
Array_udiff
Array_udiff_key
Array_udiff_assoc
حالا هر یک از توابع بالا مربوط به یافتن تفاوت بین آرایه ها در php را با جزئیات بررسی میکنیم
یافتن تفاوت بین آرایه ها در php بدون callback
ابتدا قصد داریم اطلاعات بیشتری از لیست توابع تفاوت آرایه ها ی لیست شده بدست آوریم . این توابع برای مقایسه آرایه ها در php بر اساس آرگومان آن ها به ترتیب کلید , مقدار و مقادیر ایندکس های همبسته استفاده می شوند.
Array_diff
این تابع حداقل دو آرایه می پذیرد اما حداکثر میتواند چندین آرایه بر اساس آرگومان ورودی قبول کند . المان اولی آرایه واردی با تمام آرایه های ورودی بعدی مقایسه می شود.
اگر المانی از آرایه اولی در هیچ یک از بقیه آرایه ها وجود نداشت , در اینصورت یکی از المان ها را در خروجی آرایه برگشت داده خواهد شد . مشابه آن کل آرایه با بقیه آرایه ها مقایسه خواهد شد.
Array_diff_key
این تابع مشابه تابع array_diff در php عمل می کند با این تفاوت که برای مقایسه المان های آرایه به ترتیب کلید (key) عمل می کند . اگر هیچ یک از کلید های آرایه اولی با دیگر ورودی های آرایه های دیگر یکسان نبود , پس به آرایه نتیجه اضافه می شود .
Array_diff_assoc
این تابع برای مقایسه مقادیر (value) بین آرایه ها استفاده می شود که بر اساس کلید ایندکس های همبسته مقایسه می شود . بنابراین , حتی اگر مقادیر یکسان باشد و ایندکس های آنها مشابه نباشد , آن دو آرایه متفاوت از هم تلقی خواهند شد
می توانیم درک درست و واضحی از استفاده از توابع بالا را در مثال زیر ببینم :
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php $array_from = array("fruit1" => "apple", "fruit2" => "grapes","friut3" =>"banana"); $array_against = array("fruit1" => "orange", "fruit2" => "grapes","friut4" => "banana"); $value_differences = array_diff($array_from, $array_against); $key_differences = array_diff_key($array_from, $array_against); $assoc_index_differences = array_diff_assoc($array_from, $array_against); print "<PRE>"; print_r($value_differences); print_r($key_differences); print_r($assoc_index_differences); print "</PRE>"; ?> |
در اسکریپت php بالا , زمانی که ورودی های آرایه را با هم مقایسه می کنیم و نتیجه را با استفاده از تابع print_r چاپ می کنیم , نتیجه زیر را مشاهده خواهیم کرد.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Array ( [fruit1] => apple ) Array ( [friut3] => banana ) Array ( [fruit1] => apple [friut3] => banana ) |
با استفاده از تابع array_diff
, مقدار موجود در $array_from و نا موجود در آرایه دیگر به عنوان خروجی آرایه برگشت داده می شود . مشابه آن تفاوت بین آرایه ها در php همانند خرجی بالا قابل مشاهده است
تفاوت بین آرایه ها در php با تابع برگشتی (callback)
در این نوع از پیدا کردن تفاوت بین آرایه ها در php , توابع تعریف شده توسط کاربر به عنوان تابع برگشتی استفاده می شود . برای این منظور , نیاز است که نام تابع برگشتی را به عنوان یک آرگومان به توابع از پیش تعریف شده php برای یافتن تفاوت بین آرایه ها در php پاس بدیم.
می توانیم این توابع آرایه ای را بر اساس دلیل استفاده آنها به عنوان تابع برگشتی آنها دسته بندی کنیم. در اوایل مقاله توابع مربوطه را لیست کردیم . در اینجا قصد داریم آن ها را با توضیحات لازم برای مشخص کردن هدف استفاده آنها نام ببریم
Array_diff_ukey,array_diff_uassoc
برای زمانی که الزامی است کلید و ایندکس را بر اساس مقدار آنها به صورت مرتب مقایسه کنیم.Array_udiff,array_udiff_uassoc
برای مقایسه داده های آرایه با استفاده از توابع ساخته شده توسط خود ما استفاده میشود.- به علاوه , یک تابع دیگر php به نام
array_udiff_uassoc
که برای مقایسه داده ای و ایندکس کلید ها استفاده می شود .
هر گونه مشکلی در پیاده سازی کدها داشتید ، از قسمت نظرات اقدام کنید . سریعا ، پاسخگوی سوالات شما هستیم .
موفق و پیروز باشید.