Kullanıcı bazlı ve zaman oluşturulan php dizi öğeleri gruplandırma

1 Cevap php

Bu bir kullanıcı yükleme fotoğrafları gösteren nesneler bir dizidir:

Array
(
    [12] => stdClass Object
        (
            [type] => photo
            [created] => 2010-05-14 23:36:41
            [user] => stdClass Object
                (
                    [id] => 760
                    [username] => mrsmith
                )

            [photo] => stdClass Object
                (
                    [id] => 4181
                )

        )

    [44] => stdClass Object
        (
            [type] => photo
            [created] => 2010-05-14 23:37:15
            [user] => stdClass Object
                (
                    [id] => 760
                    [username] => mrsmith
                )

            [photo] => stdClass Object
                (
                    [id] => 4180
                )

        )
)

Ancak yerine gösteren:

  • mr smith bir fotoğraf yükledi

  • mr smith bir fotoğraf yükledi

Ben göstermek istiyorum:

  • mr smith iki fotoğraf yükledi

, benzer öğeleri gruplandırma kullanıcı kimliği ile gruplandırma ve onları içinde bunları ilave ettikten tarafından, birbirlerinin 15 dakika diyelim. Yani şekil bu tür dizisini almak istiyorum:

Array
(
    [12] => stdClass Object
        (
            [type] => photo
            [created] => 2010-05-14 23:36:41
            [user] => stdClass Object
                (
                    [id] => 760
                    [username] => mrsmith
                )

            [photos] => Array
                (
                    [0] => stdClass Object
                          (
                           [id] => 4181
                          )

                     [1] => stdClass Object
                          (
                           [id] => 4180
                          )
                )

        )
)

Grubun ilk öğeyi koruyarak ve zaman yarattığı ve diğer groupable fotoğrafları ile tamamlayan ve daha sonra iki gruba ayrıldı (bu yüzden 12 ile gruplandırılmış gibi son dizisi artık anahtar 44 yok) bir ürün unsetting.

Dizi sadece fotoğraflar dışındaki eylemleri içerir, dolayısıyla 12 ve 44 orijinal anahtarları. Sadece verimli yapmak için bir yol anlamaya olamaz. Bunu yapmak için MySQL ve PHP kullanmak için kullanılır ama sadece önbelleğe nedenlerle saf PHP kullanmak çalışıyorum.

Herkes herhangi bir anlayış döken? Ben her öğe geçiyor ve dizideki önceki ancak bir önceki ille ilgili hatta bir fotoğraf olmayabilir I can eğer grup görülmeye düşündüm. Ben toplam beyin dondurma var: (

1 Cevap

Girişleri tarihe göre sipariş iseniz aşağıdakileri yapabilirsiniz:

  • 15 dakikalık bir pencerede tüm fotoğrafları ile (en $foo diyelim) bir dizi tutun. Bir FIFO listesi (kullanımı array_shift to remove items and $foo[] = ... eklemek için) gibi bir dizi kullanın.
  • Iterate over the original array
    • Geçerli öğenin tarihini kontrol ve başından kaldırmak $foo olan tarih geçerli öğe daha fazla 15 dakika daha tüm kayıtlar. Eğer az 15 dakika önce olmuş bir şey için, sen (bu döngü için bir çizgi bulunuyor) durdurmak bir öğeyi bulmak.
    • $foo olarak girdileri üzerinde yineleme
    • If a photo by the same person is found, then
      • Yeni veri eklenir, böylece $foo depolanan referans Alter
      • Orijinal dizideki geçerli öğeyi kaldırmak
      • iç döngü kırmak
    • If not
      • Sonuna kadar geçerli madde için bir başvuru ekleyin $foo ile $foo = &$var.

Daha sonra array_values boşlukları doldurmak için orijinal diziyi reindex olabilir.