array_unique in mehrdimensionalen Array

Hallo Zusammen. Ich habe ein Problem bei dem ich nicht weiter komme und hoffe, dass ihr mir helfen könnt :slight_smile:

Ich nutze bei einem Shop das Pseudovarianten Plugin von SWKWeb und bin da auch sehr zufrieden mit. Ich habe als Variantenauswahl die Bilderauswahl aktiviert. Jetzt gibt es aber bei dem Shop die Besonderheit, dass nicht über den regulären Warenkorb-Button eingekauft wird (Dieser ist mit allen anderen Sachen ausgeblendet) sondern hierzu auschließlich die Variantentabelle des Artikels genutzt wird. Die Variantenauswahl ist an sich nur noch für den Merkzettel relevant.

Bei dem Shop handelt es sich um Brillengestelle bei der sich die Artikelnummer wie folgt aufbaut:

4-stellige Produktnummer, 2-stelliger Farbcode, 4stelliger Grüßencode - bspw: 1111223333

Nun kommt es vor, dass 1 Artikel nur 1 Farbe aber mehrere Größen hat: 1111223333 und 1111224444

Dieses hat aber zu folge, dass ich 2 Auswahlpunkte habe (jeweils das gleiche Bild auf dem das Brillengestell in Farbe 22 zu sehen ist). Nachdem ich mich ein wenig mehr damit beschäftigt habe kam ich zu dem entschluss, dass es hier am besten währe einen modifier einzusetzen (array_unique) um die varibale $color_code nur einmal auszugeben. Dazu habe ich mir dann den folgenden modifier angelegt (Ist der überhaupt korrekt? Bin (noch) kein PHP Entwickler):

modifier.array_unique.php

 

Allerdings musste ich feststellen, dass mir dieser modifier bei meinem Problem garnicht hilft. Hier einmal die foreach-Schleife die mir die Variantenauswahl generiert:

                {foreach $sArticle.swkwe_pseudovariants.variants|rsort as $variant}
                    {$name = $variant.articleName}
                    {$color_code = $variant.color_code}
                    {if $variant.attributes.core && $variant.attributes.core->get('swkwe_pseudovariant_name')}
                        {$name = $variant.attributes.core->get('swkwe_pseudovariant_name')}
                    {/if}
                        
                            
                            
                                
                                    
                                        
                                    
                                
                            
                            
                                Farbe: {$color_code}
                                {$name}
                            
                            
                        
                {/foreach}

 

Jetzt ist es aber so, dass in dem Array sArticle.swkwe_pseudovariants.variants ist dann wiederum je ein weiteres Array, nähmlich die Artikelnummer “1111223333” und “1111223333” und diesen ist dann jeweils meine Variable $color_code.

Ich habe daher gedanklich 2 Ansätze zur Umsetzung meines Vorhabens:

  1. Ich brauche einen Modifier der mir multidimensionale Arrays entsprechend modifizieren kann (Bspw. sowas: PHP: array_unique - Manual ). Hierbei scheitert es auf meiner Seite allerdings schon dabei wie ich den Modifier schreiben muss. Meine derzeitigen Fähigkeiten reichen hierfür leider nicht aus.

  2. Mein 2. Gedanker war, dass ich einfach die foreach-Schleife direkt greife und hier ein |truncate:6|array_unique mache: 

    {foreach $sArticle.swkwe_pseudovariants.variants|rsort|truncate:6|array_unique as $variant}

Für mein Verstandnis müsste das doch mit der 2. Variante am einfachten sein oder? Das Array wird ausgelesen, durch den Modifier rsort entsprechend invertiert sortiert und dann auf die ersten 6 Stellen gekürzt was dann 2 mal 111122 ergeben würde. Mit array_unique wird dann das “überflüssige” Array aussortiert. (Dieses habe ich bereits versucht, funktioniert aber nicht. Die Frage ist allerdings für mich: Geht das so generell nicht? Habe ich da einen Gedankenfehler oder liegt es daran das mein Modifier nicht funktioniert?)

 

Ich bin für jegliche Hilfe dankbar.

 

Mit besten Grüßen,

Michel