PHP max () und min () seltsames Verhalten bei verschiedenen Typen

8

Ich habe mich in den letzten zwei Stunden wegen dieses Verhaltens am Kopf kratzt:

%Vor%

Was ausdruckt:

%Vor%

Als ich erwartet habe:

%Vor%

Beachten Sie, dass die Werte für die Funktionen max() und min() immer gleich sind, aber die Reihenfolge ist anders.

Gemäß der Dokumentation werden Zeichenketten, die nicht mit numerischen Zeichen beginnen, im Vergleich zu Ganzzahlen als Ganzzahl 0 ausgewertet, aber mehrere Zeichenkettenwerte werden alphanumerisch verglichen. Quelle:

Wie könnte diese Ausgabe erklärt werden?

    
AndreCunha 27.04.2016, 18:47
quelle

1 Antwort

3

Der Vergleich in min() und max() wird sequentiell ausgeführt, wie im Quelltext zu sehen ist:

min() Quellcode :

%Vor%

max() Quellcode :

%Vor%

Sie können also sehen, dass die Funktion das Array durchläuft und überprüft, ob der nächste Wert kleiner / größer als der vorherige kleinste / größte gespeicherte Wert ist.

Um zu verstehen, wie Sie diese Ergebnisse erhalten, müssen Sie auch wissen, dass der Vergleich der Werte nach PHP Typ Jonglieren.

Sehen wir uns zwei Beispiele an, um zu sehen, wie die Funktionen funktionieren:

Beispiel 1

%Vor%
  1. Beim Vergleich von 1 und 'a' bedeutet numerischer Kontext 'a' wird in 0 konvertiert, 1 ist größer als 0 .
    → int 1 zurückgegeben

  2. Beim Vergleich von 1 und '2' bedeutet numerischer String '2' wird in 2 konvertiert, 2 ist größer als 1 .
    → string '2' zurückgegeben

  • Ergebnis: String '2'

Beispiel 2

%Vor%
  1. Beim Vergleich von 1 und '2' bedeutet numerischer String '2' wird in 2 konvertiert, 2 ist größer als 1 .
    → string '2' zurückgegeben

  2. Beim Vergleich von '2' und 'a' bedeuten beide Zeichenfolgen einen Zeichenfolgenvergleich, 'a' ist größer als '2' , verglichen mit ASCII-Werte .
    → Zeichenfolge 'a' zurückgegeben

  • Ergebnis: String 'a'

Und für alle anderen Beispiele gelten dieselben Regeln.

    
u_mulder 27.04.2016, 19:02
quelle

Tags und Links