array-manipulation treibt mich in den Wahnsinn

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • array-manipulation treibt mich in den Wahnsinn

    Hallo,

    ich habe ein Gallerie-Script bei dem jeden Tag die im Index gezeigten Gallerien aktualisiert werden. Dabei wird sowohl nach allgemeiner Autoren-beliebtheit als auch den Hits bewertet. Eine hälfte der gezeigten Gallerien sind die mit dem höchsten rank, die anderen werden per Zufall aus den restlichen ausgewählt. Das Script kann sowohl für einzelne Tage als auch mehrere Tage im voraus die Gallerien bestimmen und da kommt das Problem ins Spiel.

    Ab dem zweiten Tag nimmt die Anzahl der ausgewählten Gallerien kumulativ um die Hälfte der anzuzeigenden Gallerien zu. Und ich weiss nicht wie das zustande kommt.

    Hier der Code:

    PHP-Code:

    $this
    ->gallery_count=10// Gallerien pro Tag
    $this->day_count=3// anzahl Tage

    private function sort_n_select() {
        
        
    $gals=$this->db->select("SELECT `id` FROM `galleries`
           WHERE `active`!=1 ORDER BY `gal_rank` DESC"
    );

        
    $sliced_gals=array_slice($gals, (($this->gallery_count/2)*$this->day_count));

        for(
    $q=1$q<=$this->day_count$q++) {

            
    $half_day=array();
            
    $almost_other_half=array();

            
    $slice_from=($this->gallery_count/2)*($q-1)+1;
            
    $slice_to=($this->gallery_count/2)*$q;

            
    $half_day=array_slice($gals$slice_from$slice_to);

            
    $almost_other_half=array_rand($sliced_gals, ($this->gallery_count/2));

            foreach(
    $almost_other_half as $key) {

                
    $half_day[]=$sliced_gals[$key];
                unset(
    $sliced_gals[$key]);

            }

            
    shuffle($half_day);
            
    $update[$q]=$half_day;

        }
        
        
    $this->g_merged=$update;


    Nach dem ersten durchlauf der Schleife werden 10 Gallerien in den Array gepackt, nach dem zweiten durchlauf 15 Gallerien und nach dem dritten durchlauf 20 Gallerien. Es sollten aber jeweils immer nur 10 sein.

    //Was ich noch vergessen habe, in manchen Gallerie-arrays ( $half_day ) tauchen Gallerien auf die vorher definitv durch das unset der foreach-Schleife hätten gelöscht werden müssen, da sie schon in einem der vorangegangen Arrays enthalten war.

    Vielleicht sehe ich den Wald vor lauter Bäumen nicht, aber ich habe gerade keinen blassen Schimmer woran das liegen könnte.

    MfG
    Spliffster
    Zuletzt geändert von Spliffster; 09.03.2006, 13:47.

  • #2
    Habs jetzt etwas anders und vor allem einfacher gemacht und es funktioniert wunderbar. Nur würde es mich trotzdem interessieren wo der Fehler lag.

    PHP-Code:

    private function sort_n_select() {

        
    $gals=$this->db->select("SELECT `id` FROM `galleries`
     WHERE `active`!=1 ORDER BY `gal_rank` DESC"
    );

        
    $rank_gals=array_slice($gals0, (($this->gallery_count/2)*$this->day_count));
        
    $other_gals=array_slice($gals, ((($this->gallery_count/2)*$this->day_count)+1));

        unset(
    $gals);

        for(
    $q=1$q<=$this->day_count$q++) {
            
            
    $the_day=array();
            
            for(
    $i=1$i<=($this->gallery_count/2); $i++) {
                
                
    $rank_id=array_rand($rank_gals);
                
    $other_id=array_rand($other_gals);
                
                
    $the_day[]=$rank_gals[$rank_id];
                
    $the_day[]=$other_gals[$other_id];          
                
                unset(
    $other_gals[$other_id]);
                unset(
    $rank_gals[$rank_id]);
                
            }
            
            
    shuffle($the_day);
            
    $update[$q]=$the_day;
            unset(
    $the_day);
            
        }
        
        
    $this->g_merged=$update;
        
    var_dump($this->g_merged);
        

    Kommentar

    Lädt...
    X