Gibt es eine elegante Möglichkeit, eine Struktur auf ein einfaches Array zu reduzieren?

8

Dies ist eine typische Array-Struktur :

%Vor%

Hier ist ein nicht eleganter Weg (oder "nicht so eleganter Weg"), das große Array auf ein einfaches Array zu reduzieren, das nur eine Spalte enthält:

%Vor%

Das funktioniert, aber ist es möglich, dasselbe mit nur einer Anweisung zu tun? Vielleicht benutze ich wie array_reduce() , aber ich sehe nicht wie.

Hier sind andere typische "Eleganz PHP Problem":

%Vor%

Gibt es eine PHP-Alternative? Die Idee hier ist, das Schlüsselwort ( name im Beispiel) als Array-Schlüssel und die anderen Elemente als übliche Felder zu verwenden, also das generische < starker> nicht-eleganter Algorithmus ist

%Vor%     
Peter Krauss 22.03.2015, 22:02
quelle

3 Antworten

5

Sie können array_column verwenden, um alle Werte mit dem Schlüssel name in ein anderes Array zu extrahieren

%Vor%     
FuzzyTree 22.03.2015, 22:09
quelle
2

Sie könnten Ihr Array durch diese Funktion setzen:

%Vor%

Es wird nur eine literale Folge von einfachen Werten Ihres multidimensionalen Arrays ergeben.

%Vor%

dann, wie Sie die ursprüngliche Struktur kennen - können Sie dies wie benötigt analysieren. 4ex: jeder dritte Wert könnte der Schlüsselwert eines neuen assoziierten Arrays sein, der ein Array mit Arrays der ersten beiden Werte enthält .. oder wie gewünscht

array_column ist die erste logische Ankündigung, keine Überraschungen.

    
animaacija 22.03.2015 22:19
quelle
2

Je nachdem, wie normal Ihre Daten sind und wie oft diese Probleme auftreten, können Sie eine Klasse um Ihre Daten implementieren. Sie können den ArrayAccess verwenden, Iterator und Countable , um die Änderung vollständig transparent zu machen, und Sie könnten Hilfsmethoden implementieren, um die Komplexität des Abrufens von Daten zu verbergen.

Hier ist ein Beispiel, nur mit ArrayAccess:

%Vor%

Mit dem obigen Code sollten Sie in der Lage sein, auf Ihre Daten zuzugreifen, so wie Sie es waren, aber Sie haben auch die Möglichkeit, zusätzliche Accessoren in einem netten Container zu definieren. Beachten Sie, dass Sie auch die Iterator-Schnittstelle implementieren müssen, um Ihre Daten überprüfen zu können.

Dies geht nicht auf das "Eleganz" -Problem der zugrundeliegenden Implementierung ein (die anderen Lösungen machen das gut), aber auf diese Weise wird die Komplexität komplett ausgeblendet.

    
Mathew Tinsley 22.03.2015 22:28
quelle

Tags und Links