كيفية فرز صفيف التاريخ في PHP
-
11-09-2019 - |
سؤال
لدي صفيف في هذا التنسيق:
Array
(
[0] => Array
(
[28th February, 2009] => 'bla'
)
[1] => Array
(
[19th March, 2009] => 'bla'
)
[2] => Array
(
[5th April, 2009] => 'bla'
)
[3] => Array
(
[19th April, 2009] => 'bla'
)
[4] => Array
(
[2nd May, 2009] => 'bla'
)
)
أريد فرزها في ترتيب تصاعدي للتواريخ (بناء على الشهر واليوم والسنة). ما هي أفضل طريقة للقيام بذلك؟
في الأصل يتم إحضار رسائل البريد الإلكتروني في تنسيق تاريخ MySQL، لذلك ممكن بالنسبة لي للحصول على صفيف في هذه الحالة:
Array
[
['2008-02-28']='some text',
['2008-03-06']='some text'
]
ربما عندما يكون في هذا التنسيق، يمكنني حلقة من خلالها، وإزالة كل '-'
علامات (الواصلة) بحيث يتم تركها كأعداد تصميم، فرزها باستخدام array_sort()
وحلقة من خلالهم مرة أخرى لفرزها؟ تفضل إذا كان هناك طريقة أخرى كما سأقوم بعمل 3 حلقات مع هذا لكل مستخدم.
شكرا.
تحرير: يمكنني أيضا القيام بذلك:
$array[$index]=array('human'=>'28 Feb, 2009',
'db'=>'20080228',
'description'=>'Some text here');
ولكن باستخدام هذا، سيكون هناك أي طريقة لفرز الصفيف بناء على عنصر "DB" وحده؟
تحرير 2: محدث Var_dump
المحلول
استخدام ISO (yyyy-mm-dd
) تنسيق بدلا من تنسيق "اللغة الإنجليزية"، ثم فقط استخدم ksort
وظيفة للحصول عليها بالترتيب الصحيح.
ليست هناك حاجة لإزالة الواصلات، ksort
سوف تفعل مقارنة أبجدي رقمي على مفاتيح السلسلة، و yyyy-mm-dd
تنسيق يعمل بشكل جيد تماما كما الترتيب المعجمي هو نفس ترتيب التاريخ الفعلي.
تعديل أرى أنك قمت الآن بتصحيح سؤالك لإظهار أن لديك بالفعل مجموعة من الصفائف، وأن مفتاح الفرز في الصفائف الفرعية. في هذه الحالة، يجب عليك استخدام uksort
كما أوصت في مكان آخر، لكنني أوصي أن تذهب مع تحريرك وفرزها بناء على تاريخ تنسيق DB، بدلا من تحليل تنسيق القابل للقراءة البشرية:
function cmp($a, $b)
{
global $array;
return strcmp($array[$a]['db'], $array[$b]['db']);
}
uksort($array, 'cmp');
نصائح أخرى
في الواقع، استخدم هذا:
usort($array, "cmp");
function cmp($a, $b){
return strcmp($b['db'], $a['db']);
}
:)
function cmp($a, $b) {
global $array;
return strcmp($array[$a]['db'], $array[$b]['db']);
}
uksort($array, 'cmp');
أعتقد أن هناك أفضل استخدام usort()
وظيفة بدلا من uksort()
, ، لأنه في بعض الأحيان لا يمكنك استخدام المتغيرات العالمية على الإطلاق وعلى أي حال باستخدام المتغيرات العالمية ليست ممارسة جيدة أيضا.
يمكنك أيضا استخدام وظيفة مجهولة الهوية.
// Sort in chronological order.
usort($array, function($a, $b) {
return strcmp($a['db'], $b['db']);
});