PHP-Funktion, um zu überprüfen, dass zwei Arrays identisch sind, während die Werte der angegebenen Schlüssel ignoriert werden

8

Ich brauche eine PHP-Funktion, die bestätigen kann, dass zwei Arrays gleich sind, während die Werte eines bestimmten Satzes von Schlüsseln ignoriert werden (nur der Wert, die Schlüssel müssen übereinstimmen).

In der Praxis müssen die Arrays die gleiche Struktur haben, aber einige Werte können ignoriert werden.

Betrachten wir zum Beispiel die folgenden zwei Arrays:

%Vor%

Sie sind identisch, wenn wir den Wert des Schlüssels id ignorieren.

Ich möchte auch die Möglichkeit verschachtelter Arrays in Betracht ziehen:

%Vor%

Da ich es zum Testen brauche, habe ich folgende Klasse entwickelt, die PHPUnit_Framework_TestCase und verwendet seine Assert-Funktionen:

%Vor%

doAssertArraysSame iteriert durch eines der Arrays und aktiviert rekursiv, dass die beiden Arrays die gleichen Schlüssel haben. Es prüft auch, ob sie dieselben Werte haben, es sei denn, der aktuelle Schlüssel befindet sich in der Liste der zu ignorierenden Schlüssel.

Um sicherzustellen, dass die beiden Arrays genau die gleiche Anzahl von Elementen haben, wird jedes Element während der Iteration entfernt und am Ende der Schleife prüft die Funktion, ob beide Arrays leer sind.

Verwendung:

%Vor%

Meine Frage ist: Gibt es einen besseren oder einfacheren Weg, um diese Aufgabe zu erfüllen, vielleicht mit einigen bereits verfügbaren PHP / PHPUnit-Funktionen?

BEARBEITEN: Bitte beachten Sie, dass nicht unbedingt eine Lösung für PHPUnit benötigt, wenn es eine einfache PHP-Funktion gibt, die das kann, kann ich sie in meinen Tests verwenden.

>     
Lorenzo Polidori 15.01.2013, 09:51
quelle

2 Antworten

5

Ich bin mir nicht sicher, ob das eine bessere Lösung ist als die, die Sie bereits verwenden, aber ich habe eine ähnliche Klasse schon früher benutzt, als ich genau dieses Bedürfnis hatte. Es ist in der Lage, Ihnen eine einfache wahre oder falsche Antwort zu geben und ist nicht an ein Test-Framework gekoppelt, das für Sie eine gute Sache sein kann oder nicht.

%Vor%

Und einige Beispiele basierend auf Ihrem bereitgestellten Array:

%Vor%

BEARBEITEN

Der Vorteil bei der Verwendung einer separaten Klasse wie diesem ist, dass es direkt zum Unit-Test dieser Klasse geht, um sicherzustellen, dass sie sich wie erwartet verhält. Sie möchten sich nicht auf Tools für Ihre Tests verlassen, wenn Sie nicht garantieren können, dass sie ordnungsgemäß funktionieren.

    
RobMasters 15.01.2013, 11:06
quelle
0

Sie können die Array-Elemente vorgeben

%Vor%     
Steven Scott 15.01.2013 16:24
quelle

Tags und Links