Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

الترتيب بالترتيب الطبيعي

جزء من قسم 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() بتعديل المصفوفة الأصلية مباشرةً. وهذا يجعلها مفيدة بشكل خاص لتنظيم قوائم الملفات، أو أرقام الإصدارات، أو أي بيانات تحتوي فيها السلاسل النصية على أرقام مدمجة يجب فرزها عدديًا بدلاً من أبجديًا.

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

challenge icon

التحدي

سهل

ستتلقى مدخلاً واحداً: مصفوفة من أرقام إصدارات البرامج بتنسيق 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);
?>
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow