الترتيب بالترتيب الطبيعي
جزء من قسم Logic & Flow في رحلة PHP على Coddy — الدرس 24 من 68.
بينما تعمل دوال الفرز القياسية في PHP بشكل جيد في معظم الحالات، إلا أنها قد تؤدي إلى نتائج غير متوقعة عند فرز السلاسل النصية التي تحتوي على أرقام. تقوم الدالة natsort() بحل هذه المشكلة باستخدام خوارزمية "الترتيب الطبيعي" التي تفرز السلاسل النصية بالطريقة التي يتوقعها البشر بشكل طبيعي.
تأمل هذا المثال مع أسماء الملفات:
<?php
$files = ["file1.txt", "file10.txt", "file2.txt", "file20.txt"];
// الفرز العادي sort() ينتج: file1.txt, file10.txt, file2.txt, file20.txt
sort($files);
print_r($files);
// إعادة تعيين المصفوفة
$files = ["file1.txt", "file10.txt", "file2.txt", "file20.txt"];
// الفرز الطبيعي natsort() ينتج: file1.txt, file2.txt, file10.txt, file20.txt
natsort($files);
print_r($files);
?>الفرق جوهري: تقارن sort() العادية السلاسل النصية حرفاً بحرف، لذا تأتي "file10.txt" قبل "file2.txt" لأن "1" يسبق "2" في ترميز ASCII. ومع ذلك، تتعرف natsort() على الأجزاء الرقمية وترتبها عددياً، مما يضع "file2.txt" قبل "file10.txt" كما تتوقع بشكل طبيعي.
مثل دوال الفرز الأخرى في PHP، تقوم natsort() بتعديل المصفوفة الأصلية مباشرةً. وهذا يجعلها مفيدة بشكل خاص لتنظيم قوائم الملفات، أو أرقام الإصدارات، أو أي بيانات تحتوي فيها السلاسل النصية على أرقام مدمجة يجب فرزها عدديًا بدلاً من أبجديًا.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
التحدي
سهلستتلقى مدخلاً واحداً: مصفوفة من أرقام إصدارات البرامج بتنسيق JSON. اقرأ المدخل، وقم بتحويل سلسلة JSON إلى مصفوفة، واستخدم natsort() لفرز أرقام الإصدارات بالترتيب الطبيعي، ثم اطبع المصفوفة المفروزة باستخدام print_r().
تنسيق المدخلات: سطر واحد يحتوي على مصفوفة JSON لسلاسل الإصدارات (مثال: ["v1.10","v1.2","v1.20","v1.3"])
المخرجات المتوقعة: المصفوفة المفروزة بالترتيب الطبيعي، معروضة باستخدام print_r()
ورقة مرجعية
تقوم الدالة natsort() بفرز السلاسل النصية باستخدام "الترتيب الطبيعي" - وهي الطريقة التي يتوقع بها البشر طبيعياً فرز السلاسل التي تحتوي على أرقام.
تقوم الدالة sort() العادية بمقارنة السلاسل حرفاً بحرف، بينما تتعرف natsort() على الأجزاء الرقمية وتفرزها عددياً:
$files = ["file1.txt", "file10.txt", "file2.txt", "file20.txt"];
// ينتج sort() العادي: file1.txt, file10.txt, file2.txt, file20.txt
sort($files);
// ينتج natsort(): file1.txt, file2.txt, file10.txt, file20.txt
natsort($files);
print_r($files);مثل دوال الفرز الأخرى في PHP، تقوم natsort() بتعديل المصفوفة الأصلية مباشرة. وهي مفيدة بشكل خاص لقوائم الملفات، أو أرقام الإصدارات، أو أي بيانات تحتوي على أرقام مدمجة يجب فرزها عددياً.
جرّب بنفسك
<?php
// قراءة المدخلات
$input = fgets(STDIN);
// تحويل نص JSON إلى مصفوفة
$versions = (array)json_decode($input, true);
// TODO: اكتب كودك أدناه لفرز المصفوفة باستخدام natsort()
// طباعة المصفوفة المفروزة
print_r($versions);
?>يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس 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'مراجعة: ترتيب لوحة المتصدرين