Verwenden der Hash-Klasse von cakePHP, um Daten aus einem Array zu extrahieren

8

Ich habe ein Array wie folgt:

%Vor%

Ich muss alle Bewertungen & gt; = 0 aus diesem Array extrahieren, und nur die Zahlen. Ich machte das gut mit Set::extract('/Rating/rating[rating>-1]', $video)

Aber ich habe dann gelernt, dass dies veraltet ist und Sie jetzt die Hash-Klasse verwenden sollen. Also habe ich die neue Syntax nachgeschlagen und geschrieben:

%Vor%

was mir das richtige Ergebnis gibt, aber es gibt eine nervige Warnung: Warning (4096): Argument 1 passed to Hash::_matches() must be an array, string given, called in E:\www\lib\Cake\Utility\Hash.php on line 131 and defined [CORE\Cake\Utility\Hash.php, line 170]

Die Warnung tritt nicht auf, wenn ich nicht die Bedingung drin habe ( [rating>-1] ), aber natürlich die -1, die ich nicht will. Was mache ich hier falsch? Verwechsle ich diese Funktion irgendwie? Soll ich nur die veraltete Klasse Set verwenden? Oder sollte ich die Warnung ignorieren, weil sie nicht angezeigt wird, sobald ich diese App in den Produktionsmodus versetzt habe?

    
mittmemo 09.10.2012, 21:53
quelle

1 Antwort

16

Diese Frage ist alt und ich bin mir sicher, dass sie bereits gelöst ist, aber die CakePHP-Dokumentation ist bezüglich der Verwendung der Hash-Pfadsyntax ein wenig unklar. Für den Fall, dass jemand anderes darauf gestoßen ist, habe ich Folgendes gefunden:

Die Syntax in der Frage ist nicht korrekt. Die korrekte Syntax lautet 'Hash::extract($ratings, 'Rating.{n}[rating>-1].rating')' .

Gemäß der Dokumentation: " Tokens bestehen aus zwei Gruppen. Ausdrücke werden zum Durchlaufen der Array-Daten verwendet, während matchers verwendet werden verwendet, um Elemente zu qualifizieren. ".

{n}[rating>-1] wird als ein Token betrachtet. {n} ist der Ausdruck , der die Array-Schlüssel filtert. In diesem Fall muss der Schlüssel numerisch sein. [rating>-1] ist der Matcher , der die Array-Elemente filtert. In diesem Fall muss das Element ein Array sein, das einen Schlüssel mit dem Namen rating und einen zugeordneten Wert enthält, der größer als -1 ist. Sobald Sie das Array-Element haben, können Sie das rating erhalten.

%Vor%

Ergebnisse in:

%Vor%     
MjrKusanagi 25.07.2013, 19:11
quelle

Tags und Links