Keresés

Új hozzászólás Aktív témák

  • Sk8erPeter

    nagyúr

    válasz Cathfaern #10486 üzenetére

    Na, most felraktam ide, hogy normálisan nézzen ki, így már legalább látható is, mi van a kódban... :O
    Csak most látom át, így, hogy ki is lehet valamit belőle venni, hogy csak az else ágban van a másik kettő foreach... :U A $senders-re vonatkozó részt tényleg félreértettem... hát igen, nem árt, ha normálisan van indentálva a kód....
    $senders = array();
    foreach ($messages as $message) {
    if (array_key_exists($message->sender_username, $senders)) {
    $senders[$message->sender_username]++;

    } else {
    $senders[$message->sender_username] = 1;
    }
    }

    Tehát magyarul akkor ad hozzá a $senders adott kulcsánál lévő számhoz plusz egyet, ha már létezik az adott kulcs a felhasználó nevével, egyébként eggyel egyenlő... :W
    Igazad van, ezt sem láttam át a korábbi ocsmány kód miatt (az is igaz, hogy eléggé átrohantam rajta).
    Ettől függetlenül továbbra is fenntartom, hogy ezt nem így kéne, nemsokára írom, miért. Áll a többi dolog is, azzal a módosítással, hogy ezek szerint nem fut le mindhárom ciklus, mert külön vannak. A statikus függvényhívásokra, változókra, egyebekre (pl. truncate() külön függvény/metódus, stb.) vonatkozó dolgok is állnak.

    "Amennyiben az első foreachen belül megváltoztatsz valamit a tömbön, akkor lehet értelme mégegyszer bejárni (elvileg ugyanazt a tömböt, gyakorlatilag nyilván akkor már nem ugyanazon mész végig). És ahogy láttam, itt pontosan erről van szó."
    Nézd meg még egyszer, a $messages tömbön nem változtat semmit az első ciklusban. Csak kigyűjti a $senders tömbbe a megfelelő neveket, a hozzájuk tartozó üzenetek számát. Aztán ezt használja fel a második foreach-nél, és ennyi.
    Az a baj, hogy feltételezem, a find_messages_by_users_id() metódusában eleve van már egy ciklus, ami bejárja az adatbázisból lekért eredményeket. Így tehát összesen 3 darab (!) ciklus lesz mégis, mert még ezt is be kell járni még egyszer. Úgy lehetne ezt redukálni mondjuk max. 2-re, hogy eleve egy normális query-t ír, ami felhasználók szerint csoportosítva kéri le az üzeneteket, aztán amikor ezt az eredményhalmazt bejárja PHP-vel, akkor eleve felhasználónként gyűjti egy tömbbe az üzeneteket. Akkor meg már lehetne használni ezeken a gyorsabb count() függvényt is, amivel egyből megkapná, hány darab üzenet tartozik a felhasználóhoz, meg csak a kiíratáshoz kellene bejárni.
    Úgy már nem lenne gány.

    [ Szerkesztve ]

    Sk8erPeter

Új hozzászólás Aktív témák