زبان php شامل توابع قدرتمند و همچنین زیادی برای کار با آرایه ها در php دارد که بسیار جالب و کاربردی هستند . برای مثال array_keys() , array_values() , implode و explode و غیره .. . توابع مرتب کردن آرایه در php بسیار مهم است که باید با آن ها آشنا باشید .
مرتب کردن آرایه در php که شامل شرایط مختلفی است که کدام گروه از المان ها باید مرتب شوند , متفاوت است . بخاطر این شرایط, مرتب سازی می تواند بر اساس نوع های مختلفی مانند کلید (key) , یا مقدار (value) و .. انجام شود.
PHP لیستی از توابع از پیش ساخته شده (inbuilt) برای مرتب کردن آرابه در php ارایه داده است . که شامل :
- sort() – آرایه را از کوچک به بزرگ یا صعودی (ASCending) مرتب می کند .که دو آرگومان , یکی آرایه ای که می خواهیم مرتب کنیم و دیگری گزینه های مرتب سازی , را می پذیرد . اگر برای آرگومان دوم موردی ست نشود , مقدار پیش فرض
SORT_REGULAR
خواهد بود . این موارد را بصورت جزیی تر در ادامه خواهیم دید. - rsort() – آرایه را از بزرگ به کوچک یا نزولی (DESCending) مرتب می کند
- asort() – آرایه انجمنی را به صورت صعودی و بر حسب مقدار عناصر مرتب می کند
- arsort() – آرایه انجمنی را به صورت نزولی و بر حسب مقدار عناصر مرتب می کند
- usort() – به جای آپشن های مرتب سازی , یک تابع بازگشتی (callback-function) که بر اساس مرتب سازی هر خانه از آرایه که مرتب می شود , فراخوانی و بر طبق شرایط عملیاتی انجام می دهد.
- uasort() – این تابع ترکیبی از تابع
usort()
وasort()
است که آرایه را بصورت نزولی و بر حسب مقادیر مرتب و همراه با این عملیات تابع تعیین شده توسط کاربر را اجرا می کند . - array_multisort() – این تابع برای مرتب کردن چندین آرایه در php بطور همزمان به کار می رود . همچنین برای مرتب کردن آرایه های چند بعدی با ست کردن آپشن مشخص مرتب سازی استفاده می شود .
- natsort() – توابع مرتب کردن آرایه در php که بالا لیست شدند برای مرتب کردن آرایه بر اساس استانداردی که تعریف شده استفاده می شوند . اما تابع natsort() , برای مرتب سازی آرایه براساس استانداردهایی که شخص تعیین می کند , می توان از آن بهره برد .
- natcasesort() – مشابه تابع natsort() است اما برای مواردی که کوچک و بزرگ بودن کاراکتر ها مهم نباشد (case-insensitive) استفاده می شود.
طبقه بندی توابع بالا برای مرتب سازی آرایه در php بر اساس مقادیر (value) استفاده می شود . بعضی از توابع که مرتب سازی آرایه ها را بر اساس کلید (key) مشخص می کند بصورت زیر است
- Ksort() – مشابه تابع sort() که آرایه را از کوچک به بزرگ یا صعودی (ASCending) مرتب می کند , است اما به جای مقدار بر اساس کلید مرتب می کند
- Krsort() – این تابع برای مرتب کردن آرایه بر اساس کلید و بصورت نزولی استفاده می شود .
- Uksort() – ترکیب دو تابع ksort() و usort() است که بر اساس کلید مرتب می کند و به عنوان آرگومان دوم یک تابع بازگشتی را می پذیرد .
بنابراین , تعداد زیادی از توابع برای مرتب کردن آرایه در php بر اساس شرایط مختلف وجود دارد . حالا نیاز داریم که در مورد flag
آپشن هایی که در بالا اشاره شد و می تواند در مرتب سازی آرایه بر اساس مقدار (value
) مهم باشد را میبینیم .
SORT_REGULAR
– اگر هیچ آپشنی ست نشود , این مقدار پیش فرض برای توابع مرتب سازی استفاده می شود . بر اساس این آپشن مقادیر آرایه بدون هیچ تغییری مرتب خواهند شد .SORT_NUMERIC
– همانطور که از نام مشخص است , بر اساس اعداد مرتب می کند.SORT_STRING
– با مشخص کردن این فلگ , بر اساس حروف الفبا (alphabetical) مرتب می شود .SORT_NATURAL
– به شما امکان مشخص کردن دستی مرتب سازی را می دهد .SORT_FLAG_CASE
– اگر این آپشن ست شود , مرتب سازی حروف الفبا بدون اهمیت کوچک و بزرگ بودن انجام می شود .SORT_LOCALE_STRING
– این فلگ به شما اجازه مرتب سازی بصورت الفبایی و بر اساس زبان کانفیگ شده و یا ست شده توسط تابعlocate()
انجام می دهد .
مثال مرتب کردن آرایه در php
خب یک مثال از تفاوت مرتب سازی استاندارد و طبیعی بین تابع sort()
و natsort()
را ببینیم .
1 2 3 4 5 6 |
$rollNumbers = array("018", "101", "04", "111","001"); sort($rollNumbers,SORT_STRING); echo "sort() results<br/>"; print "<PRE>"; print_r($rollNumbers); print "</PRE>"; |
در اسکریپت php بالا , تابع sort()
مرتب کردن اعداد در فرمت استاندارد استفاده شده است . با مشخص کردن آپشن SORT_STRING
, همه المان ها بر اساس استاندارد الفبایی اعداد مرتب می شود و خروجی بصورت زیر است :
1 2 3 4 5 6 7 8 |
Array ( [0] => 001 [1] => 018 [2] => 04 [3] => 101 [4] => 111 ) |
در این مورد اجازه بدید , از تابع natsort()
برای دریافت نتیجه مرتب سازی ببنیم . برای اینکار کافی است تابع زیر را به جای خط دوم کد php بالا استفاده کنید .
1 |
natsort($rollNumbers); |
حالا نتایج را می بینید .(کار با اعداد در php)
1 2 3 4 5 6 7 8 |
Array ( [4] => 001 [2] => 04 [0] => 018 [1] => 101 [3] => 111 ) |
امیدوارم از آموزش مرتب کردن آرایه در PHP نهایت استفاده را برده باشید .
هر سوالی داشتید ، از قسمت نظرات ارسال کنید . سریعا ، پاسخگوی سوالات شما هستیم .
موفق و پیروز باشید
با سلام ممنون از سایت خوبتون
ببخشید من نفهمیدم که در تابع usort ، پارامتر دومش که به صورت تابع هست اگه تابع -۱ برگردونه چی میشه و چه فرقی داره با وقتی که ۱ برگردونه یا تابع ۰ برگردونه؟
ممنون
سلام. خوشحالیم که مفید واقع شده.
یه تایع مقایسه ای ست می کنید و می توانید کوچکتر بزرگتر یا مساوی بودن مقادیر رو چک کنید :
مثال :
https://www.w3schools.com/php/phptryit.asp?filename=tryphp_func_usort
عالی و کاربردی بود، ممنون
سلام
برای سورت کردن آرایه مولتی دایمنشال با مقدار فارسی بر اساس حروف الفبا ، راهکاری دارید؟
سلام. با تابع setlocale ابتدا نوع زبان رو مشخص کنید و بعد اقدام به سورت کردن آرایه کنید
همچنین می توانید از https://www.php.net/manual/en/class.collator.php استفاده کنید
با سلام. من آرایه ای دارم که وقتی با print_r اونو چاپ میکنم برای هر عنصر آرایم شماره مینویسه به ترتیب از ۰ تا آخر.
از دستور array_unique استفاده کردم برای حذف عناصر تکراری و این باعث شد که الان با print_r آرایه را چاپ میکنم شماره هاش بهم بریزه و به ترتیب ۰ و ۱ و ۲ و …. نباشه . برای مرتب کردن شماره هاش باید چیکار کرد؟
سلام . از آموزش https://netparadis.com/php-array-sort استفاده کنید.
موفق باشید.