patsch - meine Stirn ist jetzt etwas flacher.
Meine auch. Das 1 == ( $a <=> $b ) bringt bei usort natürlich nichts. Aber statt array_reverse() nachträglich anzuwenden kann man die Paare tauschen - und vor allem auf einen billigeren Vergleich zurückgreifen. Auch wenn das erst bei ein paar tausend Items fühlbar wird: Wir wollen ja nicht das Rechenzentrum heizen um es dann wieder aufwendig zu kühlen. (Ich weiß, warum der letzte Sommer so heiß war...)
<?php
$arO    = [ 'foo', 'qix', 'Bar', 'Qix', 'bar', 'Foo' ];
$arC    = $arO;
usort( $arC, function( $a, $b ) {
		return $a <=> $b;
	} );
echo '-------------------------------' . PHP_EOL;	
echo 'Normaler Vergleich:'             . PHP_EOL;
echo ' $a <=> $b'                      . PHP_EOL;
echo '-------------------------------' . PHP_EOL;	
echo implode( ', ', $arC ) . PHP_EOL . PHP_EOL;
$arC    = $arO;
usort( $arC, function( $a, $b ) {
		return 1 == ( $a <=> $b );
	} );
echo '-------------------------------' . PHP_EOL;	
echo 'Ausschluss von -1 als Return:'  . PHP_EOL;	
echo '1 == ( $a <=> $b )'              . PHP_EOL;
echo '-------------------------------' . PHP_EOL;	
echo implode( ', ', $arC ) . PHP_EOL . PHP_EOL;
$arC    = $arO;
usort( $arC, function( $a, $b ) {
		return $b <=> $a;
	} );
echo '-------------------------------' . PHP_EOL;
echo 'Spaceship mit Reverse-Params:'   . PHP_EOL;
echo ' $b <=> $a'                      . PHP_EOL;
echo '-------------------------------' . PHP_EOL;
echo implode( ', ', $arC ) . PHP_EOL . PHP_EOL;
$arC    = $arO;
usort( $arC, function( $a, $b ) {
		return -1 * ( $a <=> $b );
	} );
echo '-------------------------------' . PHP_EOL;
echo 'Multiplikation mit -1:'          . PHP_EOL;
echo ' -1 * ( $a <=> $b )'             . PHP_EOL;
echo '-------------------------------' . PHP_EOL;
echo implode( ', ', $arC ) . PHP_EOL . PHP_EOL;
$arC    = $arO;
usort( $arC, function( $a, $b ) {
		return (int)( $a > $b );
	} );
echo '-------------------------------' . PHP_EOL;
echo 'Einfacher Vergleich'             . PHP_EOL;
echo ' (int)$a > $b'                   . PHP_EOL;
echo '-------------------------------' . PHP_EOL;
echo implode( ', ', $arC ) . PHP_EOL . PHP_EOL;
$arC    = $arO;
usort( $arC, function( $a, $b ) {
		return (int)( $a < $b );
	} );
echo '-------------------------------' . PHP_EOL;
echo 'Einfacher Vergleich, reverse'    . PHP_EOL;
echo ' (int)$a < $b'                   . PHP_EOL;
echo '-------------------------------' . PHP_EOL;
echo implode( ', ', $arC ) . PHP_EOL . PHP_EOL;
Ausgaben:
-------------------------------
Normaler Vergleich:
 $a <=> $b
-------------------------------
Bar, Foo, Qix, bar, foo, qix
-------------------------------
Ausschluss von -1 als Return:
1 == ( $a <=> $b )
-------------------------------
Bar, Foo, Qix, bar, foo, qix
-------------------------------
Spaceship mit Reverse-Params:
 $b <=> $a
-------------------------------
qix, foo, bar, Qix, Foo, Bar
-------------------------------
Multiplikation mit -1:
 -1 * ( $a <=> $b )
-------------------------------
qix, foo, bar, Qix, Foo, Bar
-------------------------------
Einfacher Vergleich
 (int)$a > $b
-------------------------------
Bar, Foo, Qix, bar, foo, qix
-------------------------------
Einfacher Vergleich, reverse
 (int)$a < $b
-------------------------------
qix, foo, bar, Qix, Foo, Bar
Am billigsten ist also die letzte Methode.
 nicht angemeldet
 nicht angemeldet Rolf B
 Rolf B Matthias Apsel
 Matthias Apsel MudGuard
 MudGuard