Element içeren tarihine göre sırala PHP çok boyutlu bir dizi

5 Cevap php

Ben gibi bir dizi var:

Array
(
[0] => Array
    (
        [id] => 2
        [type] => comment
        [text] => hey
        [datetime] => 2010-05-15 11:29:45
    )

[1] => Array
    (
        [id] => 3
        [type] => status
        [text] => oi
        [datetime] => 2010-05-26 15:59:53
    )

[2] => Array
    (
        [id] => 4
        [type] => status
        [text] => yeww
        [datetime] => 2010-05-26 16:04:24
    )

)

Herkes sıralamak için bir yol önerebilir / datetime eleman dayalı bu sipariş?

5 Cevap

http://us2.php.net/manual/en/function.array-multisort.php see third example:

<?php

$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);

foreach ($data as $key => $row) {
    $volume[$key]  = $row['volume'];
    $edition[$key] = $row['edition'];
}

array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);

?>

Bilginize, bir unix (1970 saniye) veya MySQL zaman damgası (YmdHis - 20100526014500) kullanarak çözümleyici için daha kolay olabilir olabilir ama ben senin durumunda hiç fark yapar düşünürdüm.

Belirtilen MySQL datetime alanına göre ve sırasına göre kayıtları / assoc_arrays dizi sıralama:

    function build_sorter($key, $dir='ASC') {
        return function ($a, $b) use ($key, $dir) {
            $t1=strtotime(is_array($a)?$a[$key]:$a->$key);
            $t2=strtotime(is_array($b)?$b[$key]:$b->$key);
            if($t1==$t2) return 0;
            return (str_to_upper($dir)=='ASC'?($t1 < $t2):($t1 > $t2)) ? -1 : 1;
        };
    }


    // $sort - key or property name 
    // $dir - ASC/DESC sort order or empty
    usort($arr, build_sorter($sort, $dir));

Bu çalışması gerekir. Ben strtotime üzerinden unix zaman tarih dönüştürülür.

  foreach ($originalArray as $key => $part) {
       $sort[$key] = strtotime($part['datetime']);
  }
  array_multisort($sort, SORT_DESC, $originalArray);

Bu yazı için geldi ama benim sınıf içinde ürün dönerken zaman sıralamak istedim ve ben bir hata var.

Yani php.net sitesini araştırın ve bunu sonuna kadar:

class MyClass { public function getItems(){ usort( $this->items, array("MyClass", "sortByTime") ); return $this->items; } public function sortByTime($a, $b){ return $b["time"] - $a["time"]; } }

Sen PHP.net website çok yararlı örnekler bulabilirsiniz

My array looked like this: 'recent' => array 92 => array 'id' => string '92' (length=2) 'quantity' => string '1' (length=1) 'time' => string '1396514041' (length=10) 52 => array 'id' => string '52' (length=2) 'quantity' => string '8' (length=1) 'time' => string '1396514838' (length=10) 22 => array 'id' => string '22' (length=2) 'quantity' => string '1' (length=1) 'time' => string '1396514871' (length=10) 81 => array 'id' => string '81' (length=2) 'quantity' => string '2' (length=1) 'time' => string '1396514988' (length=10)