ترتيب المصفوفات الترابطية حسب القيمة
جزء من قسم Logic & Flow في رحلة PHP على Coddy — الدرس 22 من 68.
عند العمل مع المصفوفات الترابطية (associative arrays)، غالباً ما تحتاج إلى فرزها حسب قيمها مع الحفاظ على العلاقات بين المفاتيح والقيم. يوفر PHP وظيفتين متخصصتين لهذا الغرض: asort() للترتيب التصاعدي و arsort() للترتيب التنازلي.
إليك كيف تعمل asort() لفرز القيم بترتيب تصاعدي:
<?php
$students = [
"Alice" => 85,
"Bob" => 92,
"Charlie" => 78,
"Diana" => 96
];
asort($students);
print_r($students);
// المخرجات: Array ( [Charlie] => 78 [Alice] => 85 [Bob] => 92 [Diana] => 96 )
?>لاحظ كيف تم ترتيب الدرجات الآن من الأقل إلى الأعلى، ولكن يظل اسم كل طالب مقترناً بشكل صحيح بدرجته. هذه هي الميزة الرئيسية لـ asort() مقارنة بـ sort() العادية - فهي تحافظ على الارتباط بين المفاتيح والقيم.
للترتيب التنازلي، تعمل arsort() بشكل مشابه ولكنها ترتب القيم من الأعلى إلى الأقل:
<?php
arsort($students);
print_r($students);
// المخرجات: Array ( [Diana] => 96 [Bob] => 92 [Alice] => 85 [Charlie] => 78 )
?>تقوم كلتا الدالتين بتعديل المصفوفة الأصلية مباشرة، تماماً مثل نظيراتها في المصفوفات المفهرسة. وهذا يجعلهما مثاليين لتنظيم البيانات مثل درجات الطلاب، أو أسعار المنتجات، أو أي سيناريو تحتاج فيه إلى الفرز حسب القيمة مع الحفاظ على أزواج (المفتاح-القيمة) كما هي.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
التحدي
سهلستتلقى مدخلاً واحداً: مصفوفة ترابطية (associative array) لأسماء الموظفين ورواتبهم بتنسيق JSON. اقرأ المدخلات، وقم بتحويل سلسلة JSON إلى مصفوفة، واستخدم arsort() لفرز الموظفين حسب الراتب بترتيب تنازلي (من الأعلى إلى الأقل)، ثم اطبع المصفوفة المفروزة باستخدام print_r().
تنسيق المدخلات: سطر واحد يحتوي على كائن JSON مع أسماء الموظفين كمفاتيح والرواتب كقيم (مثال: {"John":45000,"Sarah":52000,"Mike":38000,"Lisa":61000})
المخرجات المتوقعة: المصفوفة الترابطية المفروزة بترتيب تنازلي حسب قيم الرواتب، معروضة باستخدام print_r()
ورقة مرجعية
استخدم asort() لفرز المصفوفات الترابطية حسب القيم بترتيب تصاعدي مع الحفاظ على العلاقات بين المفاتيح والقيم:
<?php
$students = [
"Alice" => 85,
"Bob" => 92,
"Charlie" => 78,
"Diana" => 96
];
asort($students);
print_r($students);
// المخرجات: Array ( [Charlie] => 78 [Alice] => 85 [Bob] => 92 [Diana] => 96 )
?>استخدم arsort() لفرز المصفوفات الترابطية حسب القيم بترتيب تنازلي:
<?php
arsort($students);
print_r($students);
// المخرجات: Array ( [Diana] => 96 [Bob] => 92 [Alice] => 85 [Charlie] => 78 )
?>تقوم كلتا الدالتين بتعديل المصفوفة الأصلية مباشرة وتحافظان على الارتباط بين المفاتيح والقيم، على عكس دالة sort() العادية.
جرّب بنفسك
<?php
// قراءة المدخلات
$input = fgets(STDIN);
// تحويل JSON إلى مصفوفة ترابطية
$employees = (array)json_decode($input, true);
// TODO: اكتب الكود الخاص بك أدناه لفرز المصفوفة حسب الراتب بترتيب تنازلي
// إخراج المصفوفة المرتبة
print_r($employees);
?>يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1الدوال المتقدمة
الدوال المجهولةالـ Closures وكلمة 'use'دوال السهمدوال الـ Callbackاستخدام 'call_user_func'دوال المتغيراتالتمرير بالمرجعالدوال العوديةمراجعة: مزيج الدوال4المصفوفات متعددة الأبعاد
إنشاء مصفوفة ثنائية الأبعادالوصول إلى عناصر المصفوفة ثنائية الأبعادتعديل عناصر المصفوفة ثنائية الأبعادالتكرار باستخدام الحلقات المتداخلةالمصفوفات الترابطية ثنائية الأبعادمراجعة: تمرين الشبكة البسيطة2معالجة المصفوفات المتقدمة
الإضافة باستخدام 'array_push'الحذف باستخدام 'array_pop'الإضافة باستخدام 'array_unshift'الحذف باستخدام 'array_shift'دمج المصفوفات المفهرسةدمج المصفوفات الترابطيةالاستخراج باستخدام 'array_slice'القيم باستخدام 'in_array'المفاتيح باستخدام 'array_search'مراجعة: تمرين قائمة التشغيل3ترتيب المصفوفات
ترتيب المصفوفات المفهرسة تصاعدياًترتيب المصفوفات المفهرسة تنازلياًترتيب المصفوفات الترابطية حسب القيمةترتيب المصفوفات الترابطية حسب المفتاحالترتيب بالترتيب الطبيعيالترتيب المخصص باستخدام 'usort'مراجعة: ترتيب لوحة المتصدرين