PHP mysql tarihe göre bir dizi sıralama

3 Cevap php

Ben bir MySQL veritabanı bir tarih alanını kullanarak sıralamak istiyorum bir dizi var.

İşte news benim sınıf adlı dizinin bir örnek:

[48] => Array
    (
        [id] => 14
        [type] => 3
        [updated] => 2010-04-17 13:54:42
    )

[49] => Array
    (
        [id] => 15
        [type] => 3
        [updated] => 2010-04-17 13:57:21
    )

Ben updated alanına göre sıralamak istiyorum.

Ben başladı bazı kod var ama bunu tamamlamak ve bu çalışma için nasıl emin değilim.

class ProcessClass {
  // ....
  function sortNews($x)
  {
    usort($this->news, array("ProcessClass", "cmp")); //correct sort type?
  }

  function cmp($a, $b)
  {
    //  missing code
  }

Herkes yardımcı olabilir?

3 Cevap

Çoğu durumda, [(1)] {veri çoklu kaynaklardan geliyor ve PHP başvurmak gerekiyorsa, ancak kullanabileceğiniz, ORDER BY updated SQL sorgusu sonuna eklemek için daha kolay olacak } kullanıcı tanımlı bir işlev dayalı bir diziyi sıralamak için. Karşılaştırma için bir sınıf işlevi kullanmak için, fonksiyon MUST statik olmalıdır. Bu sadece bir MySQL biçimlendirilmiş tarihe göre sıralamak için gereken tam olarak ne dönmek olur fonksiyonunu strcmp() kullanarak dizideki updated değeri karşılaştırabilirsiniz:

class ProcessClass {
  // this must be static
  static function sort_by_updated($a, $b)
  {
    return strcmp($a['updated'], $b['updated']);
  }

  function sortNews()
  {
    usort($this->news, array("ProcessClass", "sort_by_updated")); 
  }

Eğer Sıralama düzenini tersine çevirmek istiyorsanız, sadece karşılaştırma params takas: return strcmp($b['updated'], $a['updated'])

Eğer gerçekten PHP sıralama kullanmak gerekiyorsa, bir usort() uygulanması için gidebiliriz.

<?php
function mysql_datesort($a, $b)
{
    if ($a == $b) {
        return 0;
    }

    return ($a->date_field < $b->date_field) ? -1 : 1; //custom check here
}

$a = array(); //your PHP array here...

usort($a, "mysql_datesort");

?>

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