PHP bir dizi satır ekleme

3 Cevap php

Ben bir MySQL veritabanı tablosundan kayıtları bir ilişkisel dizi yüklediniz.

The array consists of 1 to 7 rows representing one week of entries, which might not have been entered for each day.

How can I insert blank rows into the array for the missing days so that I can easily display the data in a table?

Ben boşlukları ile veritabanını güncellemek gerekmez.

Example:

             Field1  Field2  Field3  Field4 .... Field#  
Record[0]
Record[1]
Record[2]
Record[3]
Record[4]
Record[5]
Record[6]

Field4 yyyy-aa-gg olarak tarih

Ben bir başlangıç ​​tarihi ve bitiş tarihini kullanarak otomatik dizi yüklenemedi

Bazı haftalar Sun, Sal ve Cum veya Pzt, Sal, Çar, Cuma ve orada olacak Cts

3 Cevap

this is simple: Do you know how many "Fields" you have for each day? let's say it's "num of fields"

$records = array_fill(0, 7, array_fill(0, <num of fields>, ''));

bu ne yapar bu [0] boş bir dizi yaratır [6] ve her dizi elemanı için "alanları num" ile "Fields" başka bir dizi, ekler, her biri boş bir dize {[(ayarlanır 0)]}.

Şimdi bu var, sen mysql tablodan veri okuma ve seçici indeksi $ kayıtları atarsanız (varsayarak kulüpler), onları geri kalanı boş kalacak.

Gibi bir şey kullanarak $ kayıtları dizinin bir öğesi atayabilirsiniz unutmayın

$records[5] = array('New value', 'Field2 value');

hangi mysql tablodan veri okuma zaman ne olduğunu.

Eğer bir hafta içinde numaralandırılmış güne karşılık için mysql tabloda endeksi çeşit kullanıyor musunuz?

Eğer mysql kısmı ile takılıyorum yorum burada.

Diziniz birleşmeli ise tabloyu oluştururken, o zaman neden sadece kontrol ve boş satırları atlamak değil? Örnek olarak:

Example 1:

if ($row['Monday'] == '')
{
    // draw blank template
}
else
{
    // draw using live data
}

(Denenmemiş, php 5.1 ve üstü için) ilave örnek dayanarak:

Example 2:

for($i = 0; $i < count($Record); $i++)
{
    $recordDate = strtotime($Record[$i][field4]);
    $dayOfWeek = $date('N', $recordDate);
    switch ($dayOfWeek)
    {
        case '1':
            // Monday
            break;
        case '2':
            // Tuesday
            break;
        // and so on...
     }
}

Edit

Yukarıdaki kodu satırları mümkün eksikliklerden ile, hafta içi sırayla olduğu varsayılmaktadır. İlk örnekte ile sorun, dizi oldukça örnekte olduğu gibi çağrışım olmasıdır. İkinci örnek problem, MTWFS gibi bir tablo sağlayabilir tamamen atlanır çıktı, eksik bir hafta içi satır sonuçları (Perşembe atlanır) olmasıdır.

Yani, bir haftanın her günü çizer döngü ve çek all çizmek için uygun gün için satır oluşturmak gerekir. Gün bulunursa, boş bir gün çizilir:

Example 3:

$dayNames = {'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'};
// Loop that walks the days of the week:
for($d = 1; $d < 7; $d++)
{
  // Loop that checks each record for the matching day of week:
  $dayFound = false;
  for($i = 0; $i < count($Record); $i++)
  {
    $recordDate = strtotime($Record[$i][field4]);
    $dayOfWeek = $date('N', $recordDate);
    // output this day name in your own formatting, table, etc.
    echo $dayNames[$i];
    if ($dayOfWeek == $d)
    {
        // output this day's data
        $dayFound = true;
        break;
    }
    if (!$dayFound)
    {
      // output a blank template
    }
  }
}

Edit 2

Tamam o (ben sadece php falan tablolar çizmek isterim varsayarak) Bir çıkış rutin daha hafta içi tam bir kalabalık dizi olan daha fazla ilgi görünüyor. Yani bu hiçbir boşlukları ile 7 günlük bir dizi varmak için nasıl benim örnek:

Example 4:

$weekData = array(); // create a new array to hold the final result
// Loop that walks the days of the week, note 0-based index
for($d = 0; $d < 6; $d++)
{
  // Loop that checks each record for the matching day of week:
  $dayFound = false;
  for($i = 0; $i < count($Record); $i++)
  {
    $recordDate = strtotime($Record[$i][field4]);
    $dayOfWeek = $date('N', $recordDate);
    // Add one to $d because $date('N',...) is a 1-based index, Mon - Sun
    if ($dayOfWeek == $d + 1)
    {
        // Assign whatever fields you need to the new array at this index
        $weekData[$d][field1] = $Record[$i][field1];
        $weekData[$d][field2] = $Record[$i][field2];
        $weekData[$d][field3] = $Record[$i][field3];
        $weekData[$d][field4] = $Record[$i][field4];
        // ...
        break;
    }
    if (!$dayFound)
    {
      // Assign whatever default values you need to the new array at this index
      $weekData[$d][field1] = "Field 1 Default";
      // ...
    }
  }
}

(Felix Kling tarafından açıklamalarda istendiği gibi) mevcut kodunuzu gördükten olmadan, benim tahminim [(0 {denetler bir işleve geçirmeden (veya işleve dizisi geçirerek), senin dizi döngü gerekir ki )]} ve haftanın günleri veri var ve bu eksik günlerde doldurur hangi izler. Array (sadece yerine tüm hafta daha önceki 'girdi' izlemek gerekir gibi) ile başlamak için ise bu daha kolay olurdu.

Şu anda, burada vb genişletilmesi gereken bazı pseduo-kod biraz meşgulüm

$formattedWeek = getFormattedWeek($inputArray);

function getFormattedWeek($input) {
    $nextDay = 'Sunday';
    foreach ($input as $entry) {
        if (date-call-that-returns-day-of-the-week !== $nextDay) {
            $output[] = 'add whatever you need to your array';
        } else {
            $output[] = $entry;
        }
        $nextDay = call-to-increase-the-day-or-loop-back-to-Sunday();
    }
    return $output;   
}

Sen resmi almalısınız.