Ich bin derzeit migrieren ein Projekt von php5.6 zu php7.1. Die meisten laufen gut, aber ich habe gerade einen Test an der Wand gemacht.usort Unterschied php7.1 vs php5.6
Die Funktion usort hat nicht das gleiche Verhalten in beiden Versionen, und es scheint nicht dokumentiert zu sein (es ist nicht so, dass zwei Werte gleich sind und dann ist die Reihenfolge nicht definiert). In meinem Testfall ist die zurückgegebene Array-Reihenfolge umgekehrt.
Hier ist eine Reproduktion des Problems. Beachten Sie, dass ich zurück -1 die ganze Zeit für eine Vereinfachung (Ich bin in der diff zwischen PHP5.6 und 7 hier Fokussierung)
-Code läuft auf beiden Versionen:
$a = [['value' => 1, 'toto' => 'toto'], ['value' => 1, 'toto' => null]];
usort($a, function ($a, $b) { return -1;});
print_r($a);
Ergebnisse in PHP 5.6:
Array
(
[0] => Array
(
[value] => 1
[toto] =>
)
[1] => Array
(
[value] => 1
[toto] => toto
)
)
PHP 7,1
Array
(
[0] => Array
(
[value] => 1
[toto] => toto
)
[1] => Array
(
[value] => 1
[toto] =>
)
)
Das ist, weil Ihr Callback-Funktionscode 'return -1;' ziemlich bedeutungslos ist, und völlig abhängig von der Reihenfolge, in der Einträge verglichen werden ..... Sie sollten diese Annahme nicht machen, aber sollte eine tatsächliche verwenden Vergleich in Ihrem Rückruf –
Für alle Absichten und Zwecke ist die Reihenfolge Ihrer Artikel * undefined *; Sie können kein bestimmtes Ergebnis erwarten. – deceze
sollten Sie die Vergleichsfunktion vollständig implementieren. –