الترتيب المخصص باستخدام 'usort'
جزء من قسم المنطق وتدفق التنفيذ في رحلة PHP على Coddy. الدرس 25 من 68.
عندما لا تلبّي دوال الفرز المضمّنة في PHP احتياجاتك المحددة، توفّر لك دالة usort() أقصى قدر من المرونة، إذ تتيح لك تحديد كيفية مقارنة العناصر وترتيبها بدقة. تأخذ هذه الدالة منك array وfunction مخصّصة لـ comparison تكتبها لتحديد منطق الفرز.
تستقبل دالة comparison عنصرين من array ويجب أن تُرجع عددًا صحيحًا: عددًا سالبًا إذا كان ينبغي أن يأتي العنصر الأول قبل الثاني، أو صفرًا إذا كانا متساويين، أو عددًا موجبًا إذا كان ينبغي أن يأتي العنصر الأول بعد الثاني.
<?php
function compareByLength($a, $b) {
return strlen($a) - strlen($b);
}
$words = ["elephant", "cat", "butterfly", "dog"];
usort($words, "compareByLength");
print_r($words);
// المخرجات: Array ( [0] => cat [1] => dog [2] => elephant [3] => butterfly )
?>في هذا المثال، تحسب دالة comparison الفرق بين أطوال السلاسل النصية. عندما تُرجع strlen($a) - strlen($b) عددًا سالبًا، فهذا يعني أن السلسلة النصية الأولى أقصر وينبغي أن تأتي أولًا في array sorted.
مثل دوال الفرز الأخرى في PHP، تعدّل usort() الـarray الأصلي مباشرةً. تتيح هذه الدالة القوية إمكانات للفرز وفقًا لأي معايير يمكنك تخيّلها، سواء كان ذلك طول السلسلة النصية، أو منطقًا مخصصًا للأعمال، أو مقارنات معقدة متعددة الحقول.
التحدي
سهلستتلقى مُدخلًا واحدًا: مصفوفة من أسعار المنتجات بتنسيق JSON. اقرأ المُدخل، وحوّل سلسلة JSON إلى مصفوفة، وأنشئ دالة comparison لترتيب الأسعار بترتيب تصاعدي، واستخدم usort() مع دالة comparison لترتيب المصفوفة، واطبع المصفوفة sorted باستخدام print_r().
تنسيق input: سطر واحد يحتوي على مصفوفة JSON من الأرقام (مثال: [29.99,15.50,42.00,8.75,33.25])
Output المتوقع: المصفوفة sorted بترتيب تصاعدي حسب السعر، مع عرضها باستخدام print_r()
جرّب بنفسك
<?php
// قراءة المدخلات
$input = fgets(STDIN);
$prices = json_decode($input, true);
// TODO: أنشئ دالة مقارنة واستخدم usort() لفرز المصفوفة
// إخراج المصفوفة المرتبة
print_r($prices);
?>يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
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'مراجعة: ترتيب لوحة المتصدرينتدرّب بنفسك: مترجم PHP عبر الإنترنت