في هذا الدرس 6تصفّح المواضيع
لترتيب مصفوفة مفهرسة رقمياً حسب قيمها، توفر لغة PHP الدالة sort(array &$array) للترتيب التصاعدي (من الأصغر إلى الأكبر أو من أ إلى ي)، والدالة rsort(array &$array) للترتيب التنازلي العكسي.
انتبه جيداً إلى أن دوال الترتيب في PHP تعدّل المصفوفة الأصلية في مكانها بالذاكرة (In-Place) وتُرجع القيمة true فقط؛ لذلك نكتب sort($numbers); مباشرة، ولا نكتب أبداً $numbers = sort($numbers);!
<?php
$scores = [78, 95, 62, 89];
sort($scores);
echo 'Lowest: ' . $scores[0] . ' | Highest: ' . $scores[3] . "\n";
rsort($scores);
echo 'Top score now at index 0: ' . $scores[0];
عند ترتيب مصفوفة ترابطية (مثل أسماء الطلاب المرتبطة بدرجاتهم أو المنتجات المرتبطة بأسعارها)، يجب الحفاظ على الارتباط الوثيق بين كل مفتاح وقيمته.
استخدم الدالة asort() لترتيب المصفوفة تصاعدياً حسب القيم مع الاحتفاظ بالمفاتيح، واستخدم الدالة arsort() لترتيبها تنازلياً حسب القيم مع بقاء كل مفتاح مرتبطاً بقيمته.
<?php
$leaderboard = ['Tariq' => 140, 'Nadia' => 210, 'Mazen' => 175];
arsort($leaderboard);
foreach ($leaderboard as $player => $points) {
echo $player . ': ' . $points . "\n";
}
في أحيان كثيرة نرغب في ترتيب المصفوفة الترابطية أبجدياً أو رقمياً بناءً على المفاتيح (Keys) وليس القيم — مثل ترتيب قاموس الدول حسب رمز الدولة أو ترتيب تقارير المبيعات حسب مفتاح التاريخ '2026-11-01'.
استخدم الدالة ksort() لترتيب المفاتيح تصاعدياً، والدالة krsort() لترتيب المفاتيح تنازلياً.
<?php
$dailyRevenue = [
'2026-11-03' => 4200,
'2026-11-01' => 3100,
'2026-11-02' => 5800,
];
ksort($dailyRevenue);
foreach ($dailyRevenue as $day => $total) { echo $day . ': ' . $total . "\n"; }
تقارن خوارزميات الترتيب النصي التقليدية الأحرف من اليسار لليمين حرفاً بحرف، مما يجعل النص "img10.png" يظهر قبل "img2.png" لأن الحرف '1' يسبق الحرف '2' في جدول الرموز.
تطبق الدالة natsort() خوارزمية "الترتيب الطبيعي" التي تتعرف على الأرقام متعددة الخانات المدمجة داخل النصوص كأعداد كاملة، فترتب "img2.png" قبل "img10.png" تماماً كما يتوقع الإنسان (مع الحفاظ على المفاتيح).
<?php
$chapters = ['ch12', 'ch2', 'ch1', 'ch20'];
natsort($chapters);
echo implode(' -> ', $chapters); // ch1 -> ch2 -> ch12 -> ch20
تقبل دوال الترتيب مثل sort() و rsort() و asort() و ksort() معاملاً ثانياً اختيارياً $flags للتحكم الدقيق في طريقة مقارنة العناصر:
SORT_REGULAR(الافتراضي): مقارنة اعتيادية للعناصر.SORT_NUMERIC: مقارنة رقمية بحتة (مفيدة جداً عندما تكون الأرقام مخزنة كسلاسل نصية مثل"100"و"20").SORT_STRING: مقارنة العناصر كنصوص.SORT_NATURAL | SORT_FLAG_CASE: تفعيل الترتيب الطبيعي غير الحساس لحالة الأحرف مباشرة داخلsort()!
<?php
$invoiceTotals = ['120', '15', '8', '45'];
sort($invoiceTotals, SORT_NUMERIC);
echo 'Numeric sort: ' . implode(', ', $invoiceTotals);
$versions = ['v1.10', 'V1.2', 'v1.1'];
sort($versions, SORT_NATURAL | SORT_FLAG_CASE);
يلخص الجدول المرجعي التالي دوال ترتيب المصفوفات القياسية في PHP 8.4:
| الدالة البرمجية | الترتيب حسب | اتجاه الترتيب | هل تحفظ المفاتيح الأصلية؟ |
|---|---|---|---|
sort($arr, $flags) | القيمة (Value) | تصاعدي (من الأصغر للأكبر) | لا (تعيد الفهرسة من 0) |
rsort($arr, $flags) | القيمة (Value) | تنازلي (من الأكبر للأصغر) | لا (تعيد الفهرسة من 0) |
asort($arr, $flags) | القيمة (Value) | تصاعدي (من الأصغر للأكبر) | نعم (تحفظ ارتباط المفتاح بالقيمة) |
arsort($arr, $flags) | القيمة (Value) | تنازلي (من الأكبر للأصغر) | نعم (تحفظ ارتباط المفتاح بالقيمة) |
ksort($arr, $flags) | المفتاح (Key) | تصاعدي (أبجدياً أو رقمياً) | نعم (تحفظ ارتباط المفتاح بالقيمة) |
krsort($arr, $flags) | المفتاح (Key) | تنازلي (عكسياً) | نعم (تحفظ ارتباط المفتاح بالقيمة) |
natsort($arr) | القيمة (ترتيب طبيعي للأرقام) | تصاعدي | نعم (تحفظ ارتباط المفتاح بالقيمة) |
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
لقد أتقنت في هذا الدرس ترتيب المصفوفات المفهرسة عبر sort() و rsort()، وترتيب المصفوفات الترابطية مع حفظ مفاتيحها عبر asort() و arsort() و ksort() و krsort()، والترتيب الطبيعي عبر natsort() ورايات المقارنة. الخطوة التالية هي الانتقال إلى الدرس الخامس والعشرين (php-array-functions) لإتقان دوال البحث والدمج وتفكيك المصفوفات.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 Sorting Arrays ترتيب المصفوفات
- تعلّم ترتيب المصفوفات تصاعدياً وتنازلياً وبحسب المفاتيح في PHP بأسلوب PHP 8 الحديث مع أمثلة عملية وتطبيقات تفاعلية.
- للمراجعة
- 02 Sorting Indexed Arrays sort rsort ترتيب المصفوفات المفهرسة تصاعدياً
- المفهوم الأساسي لقسم ترتيب المصفوفات المفهرسة تصاعدياً في لغة PHP الحديثة.
- للمراجعة
- 03 Sorting by Value asort arsort الترتيب بالقيمة مع حفظ المفتاح
- الصياغة البرمجية والتطبيق العملي المباشر لقسم الترتيب بالقيمة مع حفظ المفتاح.
- للمراجعة
- 04 Sorting by Key ksort krsort ترتيب المصفوفات الترابطية بالمفتاح
- قواعد التحقق وأفضل الممارسات القياسية الخاصة بقسم ترتيب المصفوفات الترابطية بالمفتاح.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 PHP PHP
- PHP: Hypertext Preprocessor
- لغة البرمجة النصية على جانب الخادم لبناء تطبيقات الويب الديناميكية وواجهات البرمجة.
- للمراجعة
- 02 CLI CLI
- Command-Line Interface
- واجهة سطر الأوامر التي تتيح تشغيل ملفات PHP مباشرة عبر الطرفية.
- للمراجعة
- 03 FPM FPM
- FastCGI Process Manager
- مدير عمليات FastCGI عالي الأداء لمعالجة طلبات خادم الويب في PHP.
- للمراجعة
- 04 HTML HTML
- HyperText Markup Language
- لغة الترميز القياسية التي يولدها محرك PHP ويرسلها إلى متصفح العميل بعد التنفيذ.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
أنشئ ملف PHP محلياً ونفّذ المثال البرمجي المشروح في قسم ترتيب المصفوفات المفهرسة تصاعدياً للتحقق من المخرجات.
-
بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم الترتيب بالقيمة مع حفظ المفتاح وقارن مخرجات التنفيذ.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
لماذا تُعد كتابة $numbers = sort($numbers); خطأً برمجياً في لغة PHP؟
حدد القيمة التي تُرجعها دالة sort مقابل تعديلها للمصفوفة.
ماذا يحدث للمفاتيح النصية الترابطية إذا مررت مصفوفة ترابطية إلى الدالة sort()؟
حدد كيف تتعامل دالة sort مع المفاتيح النصية.
أي دالة ترتب المصفوفة الترابطية تنازلياً (من الأكبر للأصغر) حسب القيم مع الاحتفاظ بالمفاتيح النصية؟
اختر دالة الترتيب الترابطي التنازلي حسب القيمة.
أي دالة ترتب المصفوفة الترابطية تصاعدياً بناءً على المفاتيح (Keys)؟
اختر الدالة المخصصة للترتيب حسب المفتاح.
أي دالة ترتب العناصر ["img10.png", "img2.png", "img1.png"] بالترتيب الطبيعي ["img1.png", "img2.png", "img10.png"]؟
اختر دالة الترتيب الطبيعي للنصوص الرقمية.
يؤدي تمرير الراية SORT_NUMERIC كمعامل ثانٍ في sort($array, SORT_NUMERIC) إلى إجبار PHP على مقارنة العناصر رقمياً بدقة.
أكد وظيفة الراية SORT_NUMERIC.
هل تتميز جميع دوال الترتيب المدمجة في PHP 8 بأنها مستقرة (تحافظ على الترتيب النسبي الأصلي للعناصر المتساوية في القيمة)؟
تحقق من ميزة الترتيب المستقر في PHP 8.
أي دالتين من الدوال التالية تحافظان على ارتباط كل مفتاح بقيمته داخل المصفوفة الترابطية؟
اختر الدالتين اللتين تحفظان المفاتيح الترابطية.