"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية فرز مجموعة من الكائنات حسب التاريخ في PHP؟

كيفية فرز مجموعة من الكائنات حسب التاريخ في PHP؟

تم النشر بتاريخ 2024-11-09
تصفح:716

How to Sort an Array of Objects by Date in PHP?

فرز مجموعة من الكائنات حسب التاريخ

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

إعادة ترتيب الكائنات حسب التاريخ

خذ بعين الاعتبار المصفوفة التالية من الكائنات، حيث يمثل كل كائن سجلاً بـ خاصية التاريخ:

$array = [
    495 => (object)['date' => '2009-10-31 18:24:09'],
    582 => (object)['date' => '2010-2-11 12:01:42'],
];

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

مقارنة مخصصة الدالة

لاستخدام usort()، نحتاج إلى تحديد دالة مقارنة مخصصة تقارن بين كائنين بناءً على خاصية التاريخ الخاصة بهما. تحدد التعليمة البرمجية التالية دالة تطرح الطابع الزمني (المحول باستخدام strtotime()) لتاريخ الكائن الأول من الطابع الزمني لتاريخ الكائن الثاني:

function cb($a, $b) {
    return strtotime($a['date']) - strtotime($b['date']);
}

فرز المصفوفة باستخدام usort()

بمجرد أن نحصل على وظيفة المقارنة، يمكننا استدعاء usort() على المصفوفة، مع تمرير وظيفة المقارنة باعتبارها الوسيطة الثانية:

usort($array, 'cb');
مثال

باستخدام مصفوفة المثال من السابق، الناتج المصفوفة المصنفة ستكون:

[ 495 => (كائن)['تاريخ' => '2009-10-31 18:24:09'], 582 => (كائن)['التاريخ' => '2010-2-11 12:01:42'],
[
    495 => (object)['date' => '2009-10-31 18:24:09'],
    582 => (object)['date' => '2010-2-11 12:01:42'],
]
PHP 5.3 وما فوق

بالنسبة إلى PHP 5.3 وما فوق، يمكن استخدام وظيفة مجهولة أبسط كوظيفة مقارنة:

usort($array, function($a, $b) { إرجاع strtotime($a['date']) - strtotime($b['date']); });
usort($array, function($a, $b) {
    return strtotime($a['date']) - strtotime($b['date']);
});
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3