Ay olayların bir listesini görüntülemek için en iyi yolu

2 Cevap php

Ben olayların bir mySQL tablo var ve PHP kullanarak bunları bir liste halinde görüntülemek istiyorum. Oldukça basit, ben sadece örneğin, bir zamanlar ayın adını görüntülemek istiyorsanız hariç:

May 2010
12th, 7 pm. Event 1 - event one description
15th, 5:30 pm. Event 2 - event two description

June 2010
9th, 7 pm. Event 1 - event one description
11th, 5:30 pm. Event 2 - event two description

Ben SQL ve PHP çok yeniyim. Bunu yapmak için bir yol düşünebilirsiniz. Bu ay / yıl değeri her zaman karşılaştırarak, daha sonra tüm kayıtlar döngü, tarihe göre gruplandırılan tüm kayıtları seçerek yer alacağı ve ilk kez ay / yıl uymuyor, benim HTML tablosu için yeni bir başlık satırı yazdırmak. Ben gitmek için en iyi ya da en etkili yolu olduğuna inanamıyorum. Bir acemi için herhangi bir fikir? Ben yolumu çalışmak eminim, ama en iyi terbiyesiz, ve işlemci-yoğun, en kötü.

2 Cevap

İşte (oldukça çok açıkladık) ne yapardım:

  1. MySQL hepsi tut. MySQL (MySQL seçkin bir açıklamada tarihleri ​​sıralama önemsiz) sizin için bunları sıralamak var.
  2. PHP komut olarak, tarihler üzerinde döngü ve üzerinden her zaman, bir regex veya PHP zaman / tarih fonksiyonu ile tarihten itibaren ay çekin. Ay ($ currentMonth gibi bir şey adlandırılmış bir döngü dışında bir değişken var) geçen ay farklı ise, $ currentMonth değişkeni ayarlamak sonra, tarihini yazdırmak, bir başlık olarak yazdırın.

Bu benim hızlı ve kirli bir yaklaşım olacaktır.

Diyelim ki veritabanında UNIX zaman damgası biçimi olay zaman tutmak diyelim. (Eğer değilse, basit strtotime ($ datetime) size bu biçimi verecek).

Eğer liste üzerinden veritabanından olayların listesini (ve tarih / saat, küçükten büyük olasılıkla sipariş onları), döngü seçtiğinizde.

$events = array();

foreach ($rows as $row)
{
    $month_year = strtotime(date("Y-m-01", $row['unix_timestamp']));
    $events[$month_year][] = $row;
}

Sonra listesini yazdırmak istiyorsanız:

foreach ($events as $month_year => $month_events)
{
    echo date("F Y", $month_year);
    foreach ($month_events as $event)
    {
        printf("%s. %s", date("jS, g:i a", $event['unix_timestamp']), $event['description']);
    }
}

Sen dakika == 0 ise "jS ga" tarih biçimini kullanmak için orada biraz daha mantığı ekleyebilirsiniz.

Umarım yardımcı olur.