array_multisort()
تحذير: أعرض عنوان "<code>array_multisort()</code>" تجاهل العنوان المعروض سابقا "<code>array-replace()</code>".
(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
.
...
المزيد من المصفوفات، يتبعها طريقة الترتيب والرايات اختياريًا. تُقارن فقط العناصر المقابلة للعناصر المكافئة في المصفوفات السابقة. وبعبارة أخرى ، فإن الترتيب معجمي.
القيم المعادة
تُعيد الدالة 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
)
انظر أيضًا
- الدالة usort(): ترتيب مصفوفة باستخدام دالة مقارنة مُعرَّفة من طرف المستخدم.
- مقارنة بين دوال الترتيب الخاصة بالمصفوفات.