array_multisort()‎

من موسوعة حسوب
< PHP
اذهب إلى التنقل اذهب إلى البحث

(PHP 4, PHP 5, PHP 7)

تُرتِّب الدالة array_multisort()‎ عدة مصفوفات أو المصفوفات متعددة الأبعاد.

الوصف

bool array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed$array1_sort_flags = SORT_REGULAR [, mixed $... ]]] )

يمكن استخدام الدالة array_multisort()‎ لترتيب عدة مصفوفات دفعةً واحدةً، أو بُعد واحد أو أكثر في حالة المصفوفة متعددة الأبعاد.

ويُحتَفَظ بالمفاتيح المقترنة من النوع string، ولكن ستُعاد فهرسة المفاتيح الرقمية.

ملاحظة: إذا تساوت مقارنة عنصرين في المصفوفة، فإن ترتيبهما النسبي في المصفوفة المُرتّبة يكون غير محدد.

المعاملات

array1

المصفوفة المراد ترتيبها.

array1_sort_order

الوسيط المستخدم لترتيب المصفوفة السابقة. إما أن يكون SORT_ASC للترتيب التصاعدي أو SORT_DESC للترتيب التنازلي.

يمكن تبديل هذا الوسيط مع array1_sort_flags أو حذفه بالكامل، وفي هذه الحالة سيُفترض أنَّه SORT_ASC .

array1_sort_flags

وسيطٌ يُحدِّد خيارات ترتيب المصفوفة السابقة:

رايات (flags) أنواع الترتيب:

  • SORT_REGULAR: مقارنة العناصر بشكل طبيعي (دون تغيير الأنواع).
  • SORT_NUMERIC: مقارنة العناصر رقميًا.
  • SORT_STRING: مقارنة العناصر كسلاسل نصية
  • SORT_LOCALE_STRING: مقارنة العناصر كسلاسل نصية استنادًا إلى المحلية الحالية (current locale). ستستخدم هذه الدالة المحلية والتي يمكن تغييرها باستخدام الدالة setlocale().
  • SORT_NATURAL: مقارنة العناصر كسلاسل باستخدام الترتيب طبيعي مثل natsort()‎.
  • SORT_FLAG_CASE: يمكن جمعه (باستخدام المعامل الثنائي OR) مع SORT_STRING أو SORT_NATURAL لترتيب السلاسل بطريقة غير حساسة لحالة الحرف

يمكن تبديل هذه الوسيط مع array1_sort_order أو حذفه بالكامل، وفي هذه الحالة سيُفترض أنَّه SORT_REGULAR .

...

المزيد من المصفوفات، يتبعها طريقة الترتيب والرايات اختياريًا. تُقارن فقط العناصر المقابلة للعناصر المكافئة في المصفوفات السابقة. وبعبارة أخرى ، فإن الترتيب معجمي.

القيم المعادة

تُعيد الدالة array_multisort()‎ القيمة TRUE عند النجاح أو FALSE عند الفشل.

سجل التغييرات

الإصدار الوصف
5.4.0 إضافة SORT_NATURAL و SORT_FLAG_CASE إلى array1_sort_flags كرايات ترتيب ممكنة.
5.3.0 إضافة SORT_LOCALE_STRING إلى array1_sort_flags كرايات ترتيب ممكنة.

أمثلة

المثال 1: ترتيب عدة مصفوفات

<?php
$ar1 = array(10, 100, 100, 0);
$ar2 = array(1, 3, 2, 4);
array_multisort($ar1, $ar2);
var_dump($ar1);
var_dump($ar2);
?>

في هذا المثال، ستحتوي المصفوفة الأولى على 0، 10، 100، 100. وتحتوي المصفوفة الثانية على 4، 1، 2، 3. ورُتِّبت أيضًا عناصر المصفوفة الثانية بما يقابل العناصر المتطابقة في المصفوفة الأولى (100 و 100).

array(4) {
 [0]=> int(0)
 [1]=> int(10)
 [2]=> int(100)
 [3]=> int(100)
}
array(4) {
 [0]=> int(4)
 [1]=> int(1)
 [2]=> int(2)
 [3]=> int(3)
}

المثال 2: ترتيب مصفوفة متعددة الأبعاد

<?php
$ar = array(
      array("10", 11, 100, 100, "a"),
      array(  1,  2, "2",   3,   1)
     );
array_multisort($ar[0], SORT_ASC, SORT_STRING,
               $ar[1], SORT_NUMERIC, SORT_DESC);
var_dump($ar);
?>

ستتحول المصفوفة الأولى في هذا المثال، بعد الترتيب إلى "10" و 100 و 100 و 11 و "a" (رتِّبَت كسلاسل نصية بترتيب تصاعدي). وتحتوي الثانية على 1، 3، "2"، 2، 1 (مرتبة كأرقام، بترتيب تنازلي).

array(2) {
 [0]=> array(5) {
   [0]=> string(2) "10"
   [1]=> int(100)
   [2]=> int(100)
   [3]=> int(11)
   [4]=> string(1) "a"
 }
 [1]=> array(5) {
   [0]=> int(1)
   [1]=> int(3)
   [2]=> string(1) "2"
   [3]=> int(2)
   [4]=> int(1)
 }
}

المثال 3: ترتيب نتائج قاعدة بيانات

في هذا المثال، يمثل كل عنصر في مصفوفة البيانات صفًا واحدًا في جدول. يُعدّ هذا النوع من مجموعة البيانات نموذجيًا لسجلات قاعدة البيانات.

بيانات المثال:

volume | edition
-------+--------
    67 |       2
    86 |       1
    85 |       6
    98 |       2
    86 |       6
    67 |       7

يمكن تخزين البيانات السابقة في مصفوفة وليكن اسمها data، عادة ما نحصل على مثل هذه المصفوفات عن طريق حلقات التكرار مع استخدام mysqli_fetch_assoc()‎:

<?php
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);
?>

سنرتِّب القيم في هذا المثال تنازليًا حسب الحجم (volume)، وحسب الإصدار (edition) تصاعديًا. لدينا مصفوفة من الصفوف، ولكن تتطلب الدالة array_multisort()‎ مصفوفةً من الأعمدة، لذلك نستخدم الشيفرة التالية للحصول على الأعمدة، ثم سنُجري الترتيب.

<?php
// الحصول على قائمة من الأعمدة
foreach ($data as $key => $row) {
   $volume[$key]  = $row['volume'];
   $edition[$key] = $row['edition'];
}
// ترتيب البيانات حسب الحجم تنازليًا، وحسب الإصدار تصاعديًا
// إضافة data$ كآخر وسيط للترتيب حسب المفتاح المشترك
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
?>

ستبدو مجموعة البيانات بعد الترتيب الآن كما يلي:

volume | edition
-------+--------
    98 |       2
    86 |       1
    86 |       6
    85 |       6
    67 |       2
    67 |       7

المثال 4: ترتيب المصفوفات غير الحساس لحالة الأحرف

كلًا من SORT_STRING و SORT_REGULAR حساسيْن لحالة الأحرف، وتأتي السلاسل التي تبدأ بحرف كبير قبل السلاسل التي تبدأ بحرف صغير.

لتنفيذ ترتيب غير حساس لحالة الأحرف، فعلينا إجراء عملية الترتيب على نسخة أخرى من المصفوفة بعد تحويل أحرفها إلى الحالة الصغيرة..

<?php
$array = array('Alpha', 'atomic', 'Beta', 'bank');
$array_lowercase = array_map('strtolower', $array);
array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $array);
print_r($array);
?>

سوف ينتج المثال أعلاه:

Array
(
   [0] => Alpha
   [1] => atomic
   [2] => bank
   [3] => Beta
)

انظر أيضًا

مصادر