PHP ile diziler eşit dağıtılmış bir matris Dolum

0 Cevap php

Ben kez listelerini içeren nesnelerin bir dizi var. Ben bir tablo koymak için, bir Matrix hem dizide bu sopa var. Bu benim earlier SO question on how to build calendar tables bir parçasıdır

$node->sessions = array(
  1286452800, // '2010-10-07 14:00:00'
  1286460000, // '2010-10-07 16:00:00'
);
$node->title = 'Foo';
$nodes[1] = $node;

$node->sessions = array(
  1286452800, // '2010-10-07 14:00:00'
  1286460000, // '2010-10-07 16:00:00'
  1286461800, // '2010-10-07 16:30:00'
);
$node->title = 'Bar';
$nodes[2] = $node;

$node->sessions = array(
  1286460000, // '2010-10-07 16:00:00'
  1286461800, // '2010-10-07 16:30:00'
  1286465400, // '2010-10-07 17:30:00'
);
$node->title = 'Baz';
$nodes[3] = $node;

Bu filmlerin playdates bir tablo temsil eder. Eylem görülebileceği gibi, here. Bunun için kod, şu anda ben bilmiyorum sadece, (IMHO) çok karmaşık ve basitleştirilmiş olabilir. Belki bazı Matrix-kütüphane yalak? Yoksa habersiz bazı algorythm?

Oluşan yapı, başlığı (tablo sütun adları) ve bir dizi-dizileri ile satırları temsil eden temsil eden bir dizi olmalıdır. Aşağıdaki gibi:

$header = array(
  ' ', // empty "cell"
  ttt, // ttt being the timestamp for '14:00'
  uuu, // idem for '15:00'
  vvv, // idem for '16:00'
  www, // idem '17:00'
);
//  title, 14:00, 15:00, 16:00, 17:00
$rows = array(
  array(
    'Bar', 1286452800,  '', array(1286460000, 1286461800), '',  //Both 16:00 and 16:30 grouped under 16:00 'header'
  ),
  array(
    'Baz', '',  '', array(1286460000, 1286461800), 1286465400
  ),
  array(
    'Foo', 1286452800,  '', 1286460000,  '',
  )  
);

Each row should have the same amount of "cells". Timestamps should be grouped under the hour they belong to (16:15, 16:30 etc all grouped under 16:00) Also note that the above-given output structure might be optimised too, please let me know if there are ways to simplify the code, by simplifying or changing the resulting "matrix".

Ben şimdi ne için yalancı:

  1. başlığa göre usort $ düğümleri
  2. matris genişliğini (14:00-17:00) bulmak ve $header doldurmak için tüm $ düğümler üzerinde döngü
  3. $ başlığı üzerinde her düğüm döngü için ve ya boşaltır ('') ile veya damgaları ile bir dizi doldurmak yine tüm $ düğümler üzerinde döngü.

Now, for a the three entries above, that is not a big problem, but this matrix can grow very wide (large $headers array) and deep (many $nodes) resulting in a lot of duplicate looping. But performance and duplicate looping is not my greatest concern, mostly having cleaner and less nested, less complex code, is. :)

0 Cevap