PHP bir tarih dizisini sıralamak için nasıl

4 Cevap php

Ben bu formatta bir dizi var:

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'
        )

)

Ben (ay, gün ve yıl olarak) tarihleri ​​artan düzende bunları sıralamak istiyorum. Bunu yapmak için en iyi yolu nedir?

Başlangıçta e-postalar MySQL tarih biçiminde alınıyor, böylece olası beni bu halde dizisini almak için vardır:

Array
[
    ['2008-02-28']='some text',
    ['2008-03-06']='some text'
]

Belki zaman onun bu biçimde, içlerinden döngü, bir kez daha onlar aracılığıyla onlar integars olarak sol böylece, tüm '-' (tire) işaretlerini kaldırmak array_sort() kullanarak bunları sıralamak ve loop yapabilirsiniz bunları sıralamak? Ben kullanıcı başına bu 3 döngüler yapıyor olurdum olarak başka bir yolu olmadığını tercih ederim.

Teşekkürler.

Düzenleme: Ben de bunu yapabilirsiniz:

$array[$index]=array('human'=>'28 Feb, 2009',
                   'db'=>'20080228',
                   'description'=>'Some text here');

Ama bu kullanarak, tek başına 'db' eleman dayalı diziyi sıralamak için herhangi bir yolu var olurdu?

Düzenleme 2: Güncelleme başlangıç ​​var_dump

4 Cevap

uksort, bir geri arama tuşları ile sıralamak için kullanabileceğiniz

geri arama sadece bir zaman damgası tarih ayrıştırmak ve basit bir karşılaştırma kullanmak

Aslında, bu kullanın:

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');

Ben bazen `t ya da iyi bir uygulama değildir, tüm global değişkenler kullanabilir ve yine küresel değişkenler olabilir, çünkü usort() işlevini yerine uksort() kullanmak için daha iyi olduğunu düşünüyorum.