Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP
Code

كيفية فرز المصفوفات في PHP

by
Difficulty:BeginnerLength:LongLanguages:

Arabic (العربية/عربي) translation by Asaad (you can also view the original English article)

من السهل دائمًا الحصول على معلومات محددة من البيانات المصنفة ، وإلا عليك المرور عبر كل عنصر من المصفوفة في كل مرة. على سبيل المثال ، دعنا نفترض أنك قمت بتخزين درجات الطلاب المختلفين في فصل دراسي في مصفوفة أو جدول. إذا لم يتم فرز البيانات حسب الدرجات التي تم الحصول عليها ، فستضطر إلى إلقاء نظرة على درجة كل طالب في الصف قبل أن تتمكن من معرفة من حصل على أعلى وأقل درجة. إذا كان الجدول قد تم فرزه من الأقل إلى الأعلى على أساس الدرجات ، فإن مجرد النظر إلى درجة الطالب الأول سوف يخبرك بأقل درجة.

الفرز يجعل الكثير من المهام التي تتطلب الوصول إلى أو الحصول على مجموعة محددة من البيانات سهلة للغاية وفعالة. في هذا البرنامج التعليمي ، سوف نتعلم كيفية استخدام وظائف PHP المضمنة لفرز أنواع مختلفة من الصفيف.

فرز مصفوفة حسب القيمة

إن تصنيف مصفوفة بقيمة عناصرها سهل للغاية في PHP. يمكنك اختيار الحفاظ على ارتباطات القيمة الرئيسية أو تجاهلها ، ويمكنك أيضًا تحديد وظائفك الخاصة لإملاء كيفية فرز العناصر. سوف أظهر لك كيف في هذا القسم من البرنامج التعليمي.

يمكنك استخدام دالة (sort(&$array, $sort_flags لفرز قيم مصفوفة من أقل إلى أعلى. ومع ذلك ، فإنه لن يحافظ على أي صلة رئيسية بين القيم عند فرز المصفوفة. يتم تعيين مفاتيح جديدة للعناصر المفردة بدلاً من إعادة ترتيب بسيطة. تسمح لك العامل الثاني الاختياري بتحديد كيفية فرز العناصر. يمكن أن يكون لها ستة قيم مختلفة:

  1. SORT_REGULAR — سيؤدي هذا إلى فرز القيم دون تغيير أنواعها.
  2. SORT_NUMERIC - سيؤدي هذا إلى فرز القيم عن طريق المقارنة بينها رقميًا.
  3. SORT_STRING - سيؤدي هذا إلى فرز القيم بمقارنتها كسلسلة.
  4. SORT_LOCALE_STRING— سيقارن هذا القيم كسلسلة استنادًا إلى اللغة الحالية. يمكنك تحديث الإعدادات المحلية بنفسك باستخدام setlocale ().
  5. SORT_NATURAL - سيؤدي هذا إلى فرز العناصر باستخدام "ترتيب طبيعي" أثناء مقارنتها كسلسلة.
  6. SORT_FLAG_CASE - يمكن دمج هذا مع SORT_STRING أو SORT_NATURAL لإيقاف تشغيل التأثر بحالة أثناء فرز السلاسل.

إليك مثالان للتصنيف لمساعدتك على فهم الفرق بين كل علامات التصنيف بسرعة.

في المثال ، الفرز المنتظم ، يتم تحويل السلاسل العددية إلى قيمها العددية ويتم الفرز وفقًا لذلك. السلسلة "Apple" غير رقمية حتى يتم تركها بدون مساس ومقارنة كسلسلة.

في المثال الثاني ، الفرز الرقمي ، نريد أن يتم فرز البيانات استنادًا إلى القيمة العددية ، بحيث يتم تحويل "Apple" إلى القيمة الرقمية 0 ، ويأتي أولاً. يتم فرز بقية القيم كما هو متوقع.

في المثال الثالث ، يتم التعامل مع جميع القيم كسلسلة. وهذا يعني أنه بدلاً من مقارنة القيمة العددية لـ 123 أو 3249832 مع 38 ، تتم مقارنتها كسلسلة - حرف واحد في كل مرة. نظرًا لأن "1" يأتي قبل "3" ، تعتبر القيمة 123 أقل من 38.

إذا كنت تريد فرز قيم الصفيف من الأعلى إلى المنخفض بدلاً من منخفض إلى مرتفع ، فيمكنك القيام بذلك بمساعدة دالة () rsort. تقبل جميع العوامل المتشابهة الدالة ()sort ولكن تفرز القيم في ترتيب عكسي. كما أنه لا يحافظ على أي ارتباطات بالقيمة الرئيسية ، لذا فهو ليس اختيارًا جيدًا لفرز مصفوفات ذات صلة.

فرز مصفوفة ذات صلة رابطة

تصبح ارتباطات القيمة الأساسية مهمة عندما تتعامل مع مصفوفات لها ارتباط. فكر في المثال التالي حيث يتم استخدام مصفوفة ارتباطية لتخزين أسماء الأشخاص المختلفين والفاكهة المفضلة لديهم. إذا كنت تريد فرز القائمة أبجديًا حسب اسم الثمار ، فإن استخدام الوظيفة sort () من القسم السابق سيؤدي إلى فقدان المفاتيح الرابطة.

كما ترون ، نحن لم نخسر فقط ارتباط الأشخاص بثمارهم المفضلة ، بل فقدنا أيضًا أسماء الأشخاص المختلفين. تم تعيين كل قيمة تم فرزها على أساس رقمي جديد استنادًا إلى موضعها في المصفوفة التي تم فرزها.

لمساعدتك في معالجة هذه المشكلة بسهولة ، تحتوي PHP على وظيفتين مختلفتين تحافظان على ارتباط القيمة الرئيسية أثناء فرز المصفوفات حسب قيمها. هاتين الوظيفتين هما () asort و () arsort . تصنف التعليمات البرمجية التالية نفس المصفوفة fruit_preferences $ ولكن يستخدم () asort  للقيام بذلك.

كما يتضح من المثال أعلاه ، فإن قيمة Apple تنتقل إلى الأعلى مع الحفاظ على ارتباطها بـ Patricia. يمكن فرز أسماء الفاكهة في الاتجاه العكسي بسهولة باستخدام الدالة () arsort .

تقبل كل من هاتين الدالتين نفس علامات لتصنيف مثل قيمة العامل الثاني الاختياري الخاص بها مثل () sort  و () rsort.

فرز مصفوفة العناصر حسب القيمة مع وظائف معينة من قبل المستخدم

يمكن لوظائف الفرز الأربعة التعامل بسهولة مع احتياجات الفرز الشائعة الخاصة بك بمساعدة علامات مختلفة. ومع ذلك ، أحيانًا تكون معاييرك لمقارنة عناصر المصفوفة مختلفة.

لنفترض أن لديك مجموعة من الكلمات العشوائية التي يجب فرزها أبجديًا. ومع ذلك ، فأنت تريد أيضًا ترتيبها حسب طولها قبل تصنيفها أبجديًا. على سبيل المثال ، تأتي حديقة الحيوانات (zoo) بعد التفاحة (apple) بالفرز الأبجدي التقليدي. ومع ذلك ، إذا أردت عرض الكلمات القصيرة قبل الكلمات الأطول ، فستظهر حديقة الحيوان (zoo) قبل التفاحة (apple). في نفس مجموعة الأحرف ، سيأتي القرد (ape) قبل حديقة الحيوانات (zoo) بسبب الترتيب الأبجدي.

أساسا ، يتم فرز الكلمات أولا على أساس طولها ، ثم يتم فرز الكلمات مع نفس العدد من الحروف أبجديا ضمن مجموعاتهم الخاصة. هذا النوع من الفرز لا يتم تضمينه في PHP ، لذا سيكون علينا كتابة وظيفة الفرز الخاصة بنا.

إن ما تقدمه PHP في هذه الحالة هو توفير عدد من الوظائف التي يمكن استخدامها لتمرير المصفوفة التي تريد تصنيفها مع اسم وظيفة الفرز الخاصة بك.

يمكنك استخدام الدالة () usort لفرز قيم الصفيف في المصفوفات العادية. وبالمثل ، يمكنك استخدام دالة () uasort لفرز القيم في المصفوفات ذات الصلة ببعضها مع الحفاظ أيضًا على ارتباطات القيمة الرئيسية.

تعرض التعليمات البرمجية المتكررة أدناه إحدى الطرق لإنجاز هذا السلوك.

في دوال الإسترجاع الخاصة للفرز المخصص ، يجب علينا إرجاع عدد صحيح أقل من 0 للإشارة إلى أن القيمة الأولى أصغر من الثانية. إرجاع 0 إذا كانت القيمة الأولى تساوي الثانية. قم بإرجاع عدد صحيح أكبر من 0 إذا كانت القيمة الأولى أكبر من الثانية.

نظرًا لأن معايير الفرز الأساسية لدينا كانت طول السلسلة ، فإننا نرجع مباشرةً -1 إذا كانت الكلمة الأولى أقصر من الثانية. وبالمثل ، نرجع مباشرة 1 إذا كانت الكلمة الأولى أطول من الثانية. إذا كانت الكلمتان متساويتين في الطول ، فإننا نقارنهما أبجديًا باستخدام الدالة () strcmp ونرجع قيمته.

كما ترون في الإخراج ، فإن وظيفة الفرز المخصصة تقوم بإعادة ترتيب الكلمات بالطريقة التي أردناها بالضبط.

فرز مصفوفة حسب المفتاح

عادةً ما يكون فرز مصفوفة استنادًا إلى مفاتيحه مفيدًا عند التعامل مع المصفوفات ذات الصلة. على سبيل المثال ، قد يكون لديك مصفوفة تحتوي على معلومات حول العدد الإجمالي للمطارات في مختلف البلدان. بافتراض أن أسماء البلدان المختلفة هي مفاتيح وعدد المطارات هي قيم ، قد ترغب في فرز أسماء البلدان أبجديًا. هذا من السهل جداً القيام به من خلال الوظائف () ksort و () krsort. ستحافظ هاتان الوظيفتان على ارتباط القيمة الرئيسية لعناصر المصفوفة بعد الفرز. تفرز الدالة () ksort المفاتيح من أقل إلى أعلى وتفرز () krsort المفاتيح من أعلى إلى أقل.

في ما يلي مثال لفرز أساسي:

يمكنك أيضًا توفير PHP بدون دالة مخصصة خاصة بك لفرز مفاتيح المصفوفة باستخدام وظيفة ()uksort. تمامًا مثل ()usort ، تتطلب دالة الإسترجاع في ()uksort أيضًا أن تقوم بإرجاع عدد صحيح أقل من 0 إذا كان المفتاح الأول يعتبر أقل من الرقم الثاني وعدد صحيح أكبر من 0 إذا كان المفتاح الأول أكبر من الثاني. تحافظ هذه الوظيفة أيضًا على ارتباط القيمة الرئيسية لعناصر المصفوفة.

في المثال أعلاه ، استخدمنا وظيفة الفرز المخصص من القسم السابق لترتيب اسم الدول أولاً حسب طول اسمها ثم أبجديًا.

فرز المصفوفات متعددة الأبعاد في PHP

من الشائع أكثر في الحياة الواقعية التعامل مع المعلومات متعددة الأبعاد. على سبيل المثال ، ستخزن المؤسسات علامات جميع الطلاب في مجموعة متنوعة من الموضوعات في جدول واحد بدلاً من إنشاء جداول جديدة لكل موضوع. إذا كان عليك تخزين نفس المعلومات في PHP ، فإنك تفضل القيام بذلك باستخدام مصفوفة متعددة الأبعاد بدلاً من مصفوفة منفصلة لكل موضوع.

في هذا البرنامج التعليمي ، سوف نتعلم كيفية فرز مصفوفة متعددة الأبعاد باستخدام قائمة من أطول المباني في العالم كمثال. ستحتوي مصفوفتنا على معلومات حول اسم المبنى والمدينة والبلد الذي تقع فيه ، وعدد الطوابق والارتفاع الكلي بالأمتار إلى جانب السنة التي تم فيها البناء.

عندما تريد فرز القيم في مصفوفة متعددة الأبعاد تعتمد على حقل معين ، يمكنك ببساطة استخدام الدالة ()usort. يجب أن يساعدك المثال أدناه على فهم هذه التقنية بشكل أفضل.

في المثال أعلاه ، يتم تخزين المعلومات حول كل مبنى في المصفوفة الخاصة به داخل مصفوفة tallest_buildings $ الرئيسية. تقوم وظيفة ()storey_sort ببساطة بطرح أرقام الطوابق في المبنى الثاني من الأولى لتحديد المبنى الأصغر وفقًا لمعاييرنا. لا داعي للقلق بشأن إرجاع قيمة سلبية أو إيجابية محددة لأن جميع القيم السلبية تعني أصغر وكل القيم الإيجابية تعني أكبر.

في النهاية ، نكرر فقط من خلال المجموعة الرئيسية ونطبع المعلومات حول كل مبنى.

افكار اخيرة

في هذا البرنامج التعليمي ، عرضت عليك بعض الوظائف المختلفة في PHP والتي يمكن استخدامها لفرز المصفوفات إما من خلال مفاتيحها أو قيمها. كما تعلمنا كيفية فرز مصفوفة من خلال مفاتيحها أو قيمها باستخدام معايير الفرز المخصصة الخاصة بنا بمساعدة وظائف ()uksrot و ()uasort. ناقش القسم الأخير كيفية فرز جميع القيم في مجموعة متعددة الأبعاد باستخدام حقل معين فقط.

آمل أن تكون قد تعلمت شيئًا جديدًا من هذا البرنامج التعليمي. إذا كانت لديك أي أسئلة أو اقتراحات ، فيرجى إبلاغي بها في التعليقات. أفضل طريقة للتعلم هي محاولة إنشاء بعض الأمثلة الخاصة بك ، فرز المصفوفات باستخدام هذه الوظائف.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.