صفحه اصلیدرباره ماخدماتفن آوري هانمونه كارهامشتریانمقالاتتماس با ما
 
 
گروه نرم افزاري وبيليكس > مقالات > مرتب سازي عبارات فارسي بانك اطلاعاتي در PHP
مرتب سازي عبارات فارسي بانك اطلاعاتي در PHP
پي.اچ.پي (PHP)

يكي از عناوين مهم در بحث سايتهاي Dynamic، امكان تغيير خصوصيات نمايشي در ليستها مي باشد. بدين معنا كه در هنگام مشاهده ليستهاي مختلف (مانند ليست مقالات موجود در يك سايت) شما مي توانيد درخواستي مبني بر نمايش مقالات دو ماه گذشته به ترتيب تعداد مشاهده مقاله را ارسال نموده و سايت (در واقع برنامه نوشته شده به يكي از زبان هاي Server Side بر روي سايت) پس از جستجو در بانك اطلاعاتي و مرتب سازي مواردي كه شرايط جستجو در ارتباط با آنها صدق مي كند، اطلاعات (ليست مقالات در اين مثال) را براي شما به نمايش در خواهد آورد.

در اين ميان ممكن است شما بخواهيد امكان مرتب سازي اطلاعات بر اساس فيلدهايي كه متن آنها به زبان فارسي مي باشد (براي مثال عنوان مقاله) را نيز (به عنوان مدير سايت) در سايت خودتان ايجاد نماييد. در اين صورت چنانچه اين فيلدها به يكي از فرمتهاي فارسي (مانند UTF-8 يا 1256) در بانك اطلاعاتي ذخيره شده باشند، شما نمي توانيد از امكانات دستورات SQL براي دريافت اطلاعات بترتيب خواسته شده استفاده نماييد.

براي انجام اين كار مي توان از دو روش زير استفاده نمود:

- دريافت اطلاعات مرتب نشده از بانك و مرتب سازي آنها پس از آن
در اين حالت، شما اطلاعات مورد نظر (با توجه به شرايط مورد نظر كاربران و بخش WHERE در دستور SQL) را بصورت نامرتب دريافت نموده و سپس با استفاده از الگوريتمهاي sort (مرتب سازي) متداول به صورت مرتب شده آنها را نمايش مي دهيد. مهمترين اشكالي كه در اين حالت ممكن است ايجاد شود در هنگامي است كه شما با حجم بالايي (از نظر تعداد) از اطلاعات مواجه باشيد و در اين حالت مرتب سازي اطلاعات براي نمايش باعث مي شود تا زمان زيادي صرف انجام اين عمليات شده و در نتيجه از سرعت ايجاد صفحات كاسته خواهد شد. كه اين خود تاثير منفي بر كاركرد كل سايت ايجاد خواهد نمود.

- ايجاد فيلدهاي اضافي براي نگهداري نحوه مرتب سازي فيلدهاي فارسي و درخواست اطلاعات بصورت مرتب بر اساس اين فيلدها
در اين حالت - همانطور كه از نام آن مشخص است - براي هر كدام از فيلدهاي فارسي كه امكان مرتب سازي آنها وجود دارد (مانند عنوان مقاله) يك فيلد اضافي در بانك اطلاعاتي ايجاد مي شود (كه در اين مقاله با نام فيلد مرتب سازي از آن نام خواهيم برد) كه مقدار آن همواره معادلي براي فيلد فارسي خواهد بود. اين معادل بايد بگونه اي ايجاد گردد تا در هنگام در خواست اطلاعات بصورت مرتب شده بر اساس فيلد فارسي از آن در عبارت مرتب سازي (ORDER BY) در دستور SQL استفاده شود. اين معادل در واقع از تبديل تك تك حروف عبارت فارسي به معادلي به زبان انگليسي بصورت يكتا ايجاد مي گردد به صورتي كه ترتيب حروف فارسي و معادل انگليسي آنها رعايت شده باشد.
به تابع زير توجه نماييد:

 

function STR_Sort($text) {
  $symbol = array( "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "z" );

  $persian = array( "Ø¢", "ا", "ب", "Ù¾", "ت", "Ø«", "Ø", "Ú†", "Ø­", "Ø®", "د", "Ø°", "ر", "ز", "Ú˜", "س", "Ø´", "ص", "Ø", "Ø•", "ظ", "ع", "غ", "ف", "Ù‚", "Ú©", "Ú¯", "Ù„", "Ù…", "Ù†", "Ùˆ", "Ù‡", "ÙŠ", "#" );

  for ($p=0; $p <count($persian); $p++) $text = str_replace($persian[$p], $symbol[$p], $text);
  return $text;
}

 

همانطور كه متوجه شده ايد. اين تابع از دو آرايه براي نگهداري كاراكترهاي فارسي و معادل آنها در انگليسي استفاده مي نمايد و با استفاده از اين دو آرايه و جايگزين كردن حروف فارسي با معادل آنها مقدار خروجي (كه بايد در فيلد مرتب سازي بانك اطلاعاتي ذخيره شود) را توليد مي نمايد. (اين تابع در كاراكترمپ UTF-8 مي تواند مورد استفاده قرار بگيرد)

 

حال در صورتي كه شما معادلي كه اين تابع براي عبارت فارسي ايجاد مي نمايد را در فيلد مرتب سازي بانك اطلاعاتي ذخيره نماييد، در هنگام درخواست اطلاعات بصورت مرتب شده بر اساس فيلد فارسي، كافي است در دستور SQL (كه همان دستور SELECT مي باشد) براي مقدار فيلد مرتب سازي (ORDER BY) از نام فيلد مرتب سازي كه معادل فيلد فارسي در آن نگهداري مي شود استفاده نماييد و در هنگام نمايش اطلاعات، مقدار فيلد فارسي را در صفحه نمايش دهيد. همانطور كه اشاره شد بديهي است كه به دليل آنكه مرتب سازي بر اساس حروف انگليسي (كه معادل فيلد فارسي از اين كاراكترها تشكيل شده است) بدرستي انجام مي شود و در تابع فوق نيز ترتيب حروف فارسي و معادل انگليسي آنها رعايت شده است، نتيجه نمايش داده شده كاملا به ترتيب فارسي نمايش داده خواهد شد.

 

اين حالت براي عبارتي كه كاملا فارسي مي باشند به درستي كار مي كند. اما اگر فيلد مورد نظر مجموعه اي از كاراكترهاي فارسي و انگليسي باشد، در مواردي (مخصوصا اگر عبارت با كاراكتر انگليسي آغاز شود) اشكالاتي ممكن است در هنگام مرتب سازي ايجاد شود. براي رفع اين اشكالات مي توان از يك فيلد ديگر (كه ما آنرا فيلد زبان مي ناميم) استفاده نمود. محتواي اين فيلد مشخص كننده آن است كه آيا فيلد اصلي كاملا به زبان فارسي است يا نه؟ و در هنگام مرتب سازي از آن مي توان به عنوان يكي ديگر از پارامترهاي مرتب سازي (ORDER BY) استفاده نمود.

 

با استفاده از اين امكان مي توانيد قدرت اطلاع رساني در سايت خود را افزايش داده و به بازديد كنندگان سايت خود امكان استفاده از امكانات متعدد براي مشاهده ليست محتويات سايت خود را بدهيد.

 


 
 
© 2012 - WEBILIX websolutions