مرتب سازی آرایه ها در PHP

در اکثر زبان های برنامه نویسی، میتوانیم لیستی از اطلاعات را در قالب یک آرایه داشته باشیم. مرتب سازی این اطلاعات به صورت صعودی یا نزولی، یکی از نیازمندی هایی است که ممکن است با آن سر و کار زیادی داشته و مخصوصاً در برنامه های کاربردی سمت وب از آن استفاده های متعددی داشته باشیم.

 

مرتب سازی آرایه های یک بعدی

در زبان برنامه نویسی سمت سرور PHP چندین تابع مختلف برای مرتب سازی آرایه ها از پیش تعریف شده که با استفاده از آنها میتوان آرایه های مختلف و نیز آرایه های چند بعدی را بر اساس اطلاعات درون آن مرتب کرد.

 

تابع sort برای مرتب سازی آرایه به صورت صعودی

اولین تابع و یکی از پر کاربردترین توابع مرتب سازی، تابع sort() است. این تابع در اصل دو ورودی میگیرد؛ ورودی اول اجباری و ورودی دوم به صورت اختیاری است. جالب است بدانید که در اکثر کاربردها از ورودی دوم هیچ استفاده ای نمیشود!

پس از فراخوانی این تابع، آرایه داده شده به آن، با ترتیب صعودی مرتب میشود.

باید دقت داشته باشید که با فراخوانی تمام توابع مرتب سازی، تغییرات بر روی همان آرایه انجام شده و به عبارتی آرایه (بدون ترتیب) را از دست خواهید داد.

$arr = array( 14, 21, 6, 4, 9, 15 );

sort( $arr );

// Output: $arr = array( 4, 6, 9, 14, 15, 21 )

 

پارامتر دوم این تابع برای تغییر رفتار مرتب سازی استفاده میشود؛ با استفاده از این ورودی، میتوان مشخص کرد که با آیتم های درون آرایه به چه صورتی برخورد کند.

به عنوان مثال، سه مورد از هفت مورد قابل استفاده در این پارامتر به شرح زیر است.

  • SORT_REGULAR : مقایسه آیتم ها به طور معمول
  • SORT_NUMERIC : مقایسه آیتم ها به عنوان عدد
  • SORT_STRING : مقایسه آیتم ها به عنوان رشته

به صورت پیشفرض و در صورت عدم تعریف پارامتر دوم، مورد اول در مرتب سازی استفاده میشود و میتوان تمام آیتم های عددی یا رشته ای و … را درون آرایه مرتب کرد.

 

تابع rsort برای مرتب سازی آرایه به صورت نزولی

تابع rsort() دقیقاً مشابه تابع قبلی عمل میکند اما به جای مرتب سازی صعودی، تمام آیتم های موجود در آرایه را با ترتیب نزولی مرتب میکند.

$arr = array( 14, 21, 6, 4, 9, 15 );

rsort($arr);

//Output: $arr = array( 21, 15, 14, 9, 6, 4 )

 

مرتب سازی آرایه رشته ای

همانطور که گفته شد، از دو تابع قبلی میتوان به جهت مرتب سازی آرایه شامل هر نوع آیتم استفاده نمود. فرض کنید که یک آرایه از اسامی افراد داریم و میخواهیم آنها را به ترتیب حروف الفبا مرتب کنیم.

$arr = array( "Omid", "Ali", "Negar", "Majid", "Nazanin" );

sort($arr);

// output: "Ali", "Majid", "Nazanin", "Negar", "Omid"

 

مرتب سازی اسامی فارسی در PHP

به همین راحتی آرایه اسامی ما با ترتیب صعودی (ترتیب حروف الفبا) مرتب شد!

توابع مرتب سازی در زبان PHP از زبان فارسی نیز پشتیبانی میکنند.

$arr = array( "امید", "علی", "نگار", "مجید", "نازنین" );

sort($arr);

// output: "امید", "علی", "مجید", "نازنین", "نگار"

 

به دلیل اینکه مرتب سازی بر اساس معادل کد اسکی (ASCII) کاراکترها انجام میشود، این توابع تقریبا تمام زبان ها و علائم موجود را پوشش داده و برای مرتب سازیشان میتوان از توابع آماده کمک گرفت.

 

مرتب سازی آرایه های انجمنی

بعضاً کار ما با آرایه های ساده و تک بعدی نیست و از آرایه های انجمنی نیز استفاده های زیادی داریم. منظور از آرایه های انجمنی (Associative Arrays) همان آرایه کلید و مقدار (Key & Value) است.

برای مرتب سازی این آرایه ها نیز چهار تابع در PHP تعریف شده است که در ادامه به بررسی آنها خواهیم پرداخت.

 

تابع asort

برای مرتب سازی آرایه های انجمنی با ترتیب صعودی و بر اساس مقدار (Value) هر آیتم، میتوان از این تابع استفاده کرد. به عنوان مثال فرض کنید آرایه ای داریم که تعداد کارمندان بخش های مختلف سازمان را برایمان مشخص میکند.

به صورت زیر و با استفاده از تابع asort() بخش ها را با توجه به تعداد کارمندانشان و به ترتیب صعودی مرتب میکنیم.

$arr = array( "Financial" => 4, "Programming" => 6, "Resources" => 1, "Management" => 3 );

asort( $arr );

/* output:
Array
( "Resources"   => 1,
  "Management"  => 3,
  "Financial"   => 4,
  "Programming" => 6 )
*/

 

تابع ksort

این تابع مرتب سازی آرایه های انجمنی را بر اساس کلید ها و به ترتیب صعودی انجام میدهد.

مثال زیر و نتیجه حاصل شده از آن درک بهتری از نحوه عملکرد تابع ksort() به شما خواهد داد.

$arr = array( "Financial" => 4, "Programming" => 6, "Resources" => 1, "Management" => 3 );

ksort( $arr );

/* output:
Array
( "Financial"   => 4,
  "Management"  => 3,
  "Programming" => 6,
  "Resources"   => 1 )
*/

 

تابع arsort

برای مرتب سازی آرایه های انجمنی را بر اساس مقدار و به ترتیب نزولی از این تابع استفاده میشود. (خروجی بر عکس assort() است.)

 

تابع krsort

جهت مرتب سازی آرایه های Key و Value بر اساس کلید و به ترتیب نزولی از این تابع استفاده شده که خروجی آن برعکس عملکرد تابع ksort() خواهد بود.

 

مرتب سازی آرایه های چند بعدی در PHP

منظور از آرایه های چند بعدی در اینجا آرایه هایی است که هر آیتم آن نشان دهنده یک موجودیت مشخص دارای چندین ویژگی باشد. مثلاً فرض کنید آرایه ای دارید که کاربران سایت شما را مشخص میکند؛ هر آیتم آن که نشان دهنده یک کاربر است شامل نام، ایمیل و سن می باشد.

حال ما میخواهیم این لیست این اعضا را با توجه به سن و با ترتیبی خاص مرتب کنیم.

برای چنین مرتب سازی هایی تابع از پیش تعریف شده ای در زبان PHP وجود ندارد و می بایست با خلاقیت و استفاده از چند حلقه و توابع ساده ای مشابه توابعی که در این مقاله گفته شد، مرتب سازی چنین آرایه هایی را انجام دهیم. تابع های کم کاربرتری نیز در این زبان برنامه نویسی محبوب برای مرتب سازی آرایه ها وجود دارد، نظیر تابع array_multisort() که برای مرتب سازی چندین آرایه به صورت همزمان استفاده میشود، اما بیان و بررسی آنها چندان با ارزش و ضروری نیست.