Cytat(MTF @ 29.08.2012, 21:46:20 )

...
ale na liście muszą się pojawić jeszcze posortowane "czasowo" od najnowszego do najstarszego (ograniczam wyniki czasowo więc tablica nie urośnie ogromna)..
jak posortować to w tych tablicach? ;>
W momencie gdy tworzysz treści powiadomień z wielu wpisów (w tym potrójnym foreach), musisz ustalić dodatkowy parametr "czas" i go zapisywać razem z już zgrupowanym powiadomieniem. Musisz wybrać czy czasem powiadomienia będzie czas kiedy pierwsza osoba dodała komentarz, czy też gdy ostatnia. Jeśli np. ważne jest pierwsza to nadpisujesz czas gdy jest wcześniejszy niż obecnie zapisany dla powiadomienia
//Pobierasz dane z bazy do poniższej zmiennej
$danezbazy=...;
$pogrupowanepowiadomienia=array(); //Tutaj będziesz zapisywał wszystkie treści już pogrupowanych powiadomień $sortowaniepoczasie[]=array(); //Tutaj będziesz zapisywał posortowane po czasie id do tablicy $pogrupowanepowiadomienia. Czasy będą trzymane jako klucze tej tablicy, a wartościami będą tablice zawierające id do $pogrupowanepowiadomienia. $takiliczniczek=0; //Tą zmienną będziesz indeksował tablicę $pogrupowanepowiadomienia (przy okazji będziesz wiedział ile ich masz).
//Tworzysz zgrupowane powiadomienia, czyli potrójne foreach
foreach ($danezbazy as $k_what=>$v_what) {
foreach ($v_what as $k_type=>$v_type) {
//PONIŻEJ TWORZYSZ TE POŁĄCZONE POWIADOMIENIA
switch ($k_type) {
...
case '3' : $komunikat_tmp['tresc']='Dodano komentarz do obiektu o id='.$k_what.' od: ';
$komunikat_tmp['czas']=$v_type[0]['time']; //Ustawiasz na pierwszy znaleziony czas
foreach ($v_type as $v) {
$komunikat_tmp['tresc'].=$v['od_usera'].', ';
if ($komunikat_tmp['czas']>$v['time']) $komunikat_tmp['czas']=$v['time']; //Jeśli kolejny czas zdarzenia jest wcześniejszy niż obecnie ustawiony, to ustawiasz ten wcześniejszy
}
$pogrupowanepowiadomienia[$takiliczniczek]=$komunikat_tmp['tresc']; //zapisujesz ten nowo utworzony komunikat do tablicy przechowującej wszystkie pogrupowane powiadomienia (indeksujesz liczniczkiem)
$sortowaniepoczasie[$komunikat_tmp['czas']][]=$takiliczniczek++; //Tablice $sortowaniepoczasie indeksujesz czasami powiadomień, a jako wartość podajesz tablice zawierającą id do tablicy $pogrupowanepowiadomienia; Jak już zrobisz wszystko to inkrementujesz liczniczek by nie nadpisać starszego powiadomienia
break;
case '4' : ...
...
}
}
}
ksort($sortowaniepoczasie); //sortujesz tablicę tak by foreach zwracał kolejne klucze od najmniejszego do największego, bo foreach normalnie podaje elementy w kolejności ich tworzenia, bez względu na kolejność kluczy; Jeśli chcesz sortować od największego do najmniejszego to zerknij do manuala jakie parametry trzeba dodatkowo podać.
I teraz jak chcesz wyświetlić powiadomienia od najstarszego do najmłodszego to:
foreach ($sortowaniepoczasie as $k=>$v) foreach ($v as $id) echo 'CZAS: '.$k.'; TREŚĆ: '.$pogrupowanepowiadomienia[$id];
KILKA UWAG:
- Tworzę osobną tablicę $sortowaniepoczasie, zamiast zapisywać czas w $pogrupowanepowiadomienia, bo jesli będziesz chciał jeszcze po czymś innym sortować, to wtedy poprostu dodajesz kolejną tablice analogicznie do tej z czasami. Jeśli nie chcesz, to czasy możesz zapisywać jako klucze w $pogrupowanepowiadomienia.
- Zwróć uwagę na dodatkowe (ostatnie) nawiasy w linii: $sortowaniepoczasie[$komunikat_tmp['czas']]
[] - są po to, że dla jednego czasu może pojawić się kilka powiadomień, więc bez nich mógłbyś trzymać pod tym czasem tylko jedno, ostatnio dodane.
- Troszkę pogmatwany ten kod wyszedł i pewnie przydałaby mu się jakaś optymalizacja...

Mam nadzieję, że nic nie pokręciłem i jakoś to ogarniesz.