• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage zu Arrays

Tronjer

Senior HTML'ler
Es geht um diese Seite:

Project X2

Hier wird per Ajax aus einem Bilder-Array ein kleiner Slider gebaut, und es werden dabei immer nur soviel Elemente erzeugt, wie in das Elternelement passen. Beim Klick auf den Button verschieben sich alle Bilder im Container um eine Position nach links, das erste Element wird gelöscht und ein neues aus dem Bilder-Array hinzugefügt.

Technisch ausgedrückt wird beim Klick das erste Bild in ein Array geschoben und nach der Animation mit einem Ajax-Request an den Server übergeben, der anschließend die Elemente im Slider neu lädt. Das Ganze funktioniert allerdings nur solange, wie sich noch Elemente im Bilder-Array befinden, und nun überlege ich, wie ich dieses Bilder-Array immer wieder auffülle. Mein bisheriger, noch unstrukturierter Code im Auszug:

PHP:
<?php
    $sliderWidth = $_POST['sliderWidth'];
    $linkWidth = $_POST['linkWidth'];
    $imgCount = intval($sliderWidth / $linkWidth) - 1; //Anzahl Bilder im Slider
    
    $elements = array('aufkleber', 'blöcke', 'briefbogen', 'cover', 'flyer', 'klappkarten', 'kalender', 'kuverts', 'magazine', 'mappen',
                'plakate', 'postkarten', 'sonstiges', 'visitenkarten');
    
    // per Ajax übergebene Elemente
    $hiddenElements = $_POST['elements'] ? $_POST['elements'] : array();
    
    $products = array();
    
    // subtrahiere $hiddenElemente von $elements
    foreach ($elements as $value) {
        if ( !in_array($value, $hiddenElements) ) {
            array_push($products, $value);
        }
    }
    
    // Fülle das Array auf
    if (count($products) < $imgCount) {
        array_push($products, array_shift($elements));
    }   

for ($i = 0; $i <= $imgCount; $i++) : ?>
    <a class="product-link" href="#"><img class="product-icon" src="img/<?php echo $products[$i]; ?>.jpg" alt="<?php echo $products[$i]; ?>" /></a>
<?php endfor; ?>

Die foreach-Schleife vergleicht das Bilder-Array mit den per Ajax übergebenen Werten und erzeugt aus der Differenz das Array $products. Die for-Schleife erzeugt aus $products soviel HTML-Elemente, wie im Container Platz haben.

Die if-Abfrage soll nun prüfen, ob noch genügend Elemente in $products vorhanden sind und dieses Array bedarfsweise mit Bildern aus $elements auffüllen, und genau an dem Punkt hänge ich fest. Ehe ich jetzt weiter frickel, wollte ich fragen, ob es für die Aufgabe nicht einen eleganteren Ansatz gibt.
 
Zuletzt bearbeitet von einem Moderator:
Um die Fragestellung zu verkürzen:

Gegeben sind drei Arrays.

Die Formel lautet: Array_1 - Array_2 = Array_3.

Array_3 besitzt eine Mindestgröße und wird mit jeder Iteration um ein Element verkleinert. Falls die Mindestgröße unterschritten wird, soll Array_3 mit Elementen aus Array_1 aufgefüllt werden.

Das war zumindest mein Ansatz, aber vielleicht gibt es da ja noch etwas Besseres.
 
Zurück
Oben