انتقل إلى محتوى الدرس
الدرس 31
دورة PHP

ترتيب المصفوفات تصاعدياً وتنازلياً وبحسب المفاتيح في PHPPHP Sorting Arrays

تعلّم ترتيب المصفوفات تصاعدياً وتنازلياً وبحسب المفاتيح في PHP بأسلوب PHP 8 الحديث مع أمثلة عملية وتطبيقات تفاعلية.
أقسام الدرس
6
الأمثلة
5
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

لترتيب مصفوفة مفهرسة رقمياً حسب قيمها، توفر لغة PHP الدالة sort(array &$array) للترتيب التصاعدي (من الأصغر إلى الأكبر أو من أ إلى ي)، والدالة rsort(array &$array) للترتيب التنازلي العكسي.

انتبه جيداً إلى أن دوال الترتيب في PHP تعدّل المصفوفة الأصلية في مكانها بالذاكرة (In-Place) وتُرجع القيمة true فقط؛ لذلك نكتب sort($numbers); مباشرة، ولا نكتب أبداً $numbers = sort($numbers);!

مخطط مقارنة دوال ترتيب المصفوفات في PHP 8.4 بين sort و asort و ksort و natsort
PHP
<?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
<?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
<?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
PHP
<?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
<?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

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 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

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 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 ويرسلها إلى متصفح العميل بعد التنفيذ.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. أنشئ ملف PHP محلياً ونفّذ المثال البرمجي المشروح في قسم ترتيب المصفوفات المفهرسة تصاعدياً للتحقق من المخرجات.

  2. بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم الترتيب بالقيمة مع حفظ المفتاح وقارن مخرجات التنفيذ.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 3أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

لماذا تُعد كتابة $numbers = sort($numbers); خطأً برمجياً في لغة PHP؟

حدد القيمة التي تُرجعها دالة sort مقابل تعديلها للمصفوفة.

02

ماذا يحدث للمفاتيح النصية الترابطية إذا مررت مصفوفة ترابطية إلى الدالة sort()؟

حدد كيف تتعامل دالة sort مع المفاتيح النصية.

03

أي دالة ترتب المصفوفة الترابطية تنازلياً (من الأكبر للأصغر) حسب القيم مع الاحتفاظ بالمفاتيح النصية؟

اختر دالة الترتيب الترابطي التنازلي حسب القيمة.

04

أي دالة ترتب المصفوفة الترابطية تصاعدياً بناءً على المفاتيح (Keys)؟

اختر الدالة المخصصة للترتيب حسب المفتاح.

05

أي دالة ترتب العناصر ["img10.png", "img2.png", "img1.png"] بالترتيب الطبيعي ["img1.png", "img2.png", "img10.png"]؟

اختر دالة الترتيب الطبيعي للنصوص الرقمية.

06

يؤدي تمرير الراية SORT_NUMERIC كمعامل ثانٍ في sort($array, SORT_NUMERIC) إلى إجبار PHP على مقارنة العناصر رقمياً بدقة.

أكد وظيفة الراية SORT_NUMERIC.

07

هل تتميز جميع دوال الترتيب المدمجة في PHP 8 بأنها مستقرة (تحافظ على الترتيب النسبي الأصلي للعناصر المتساوية في القيمة)؟

تحقق من ميزة الترتيب المستقر في PHP 8.

08

أي دالتين من الدوال التالية تحافظان على ارتباط كل مفتاح بقيمته داخل المصفوفة الترابطية؟

اختر الدالتين اللتين تحفظان المفاتيح الترابطية.