Ich experimentierte mit PHP-Typ Jonglieren und fand ein weibliches Verhalten, das ich nicht erklären kann. Ich sortierte Objekte basierend auf einer Eigenschaft, die manchmal eine Zeichenfolge, manchmal eine Zahl ist. Bei Verwendung von usort geraten einige Elemente fehl am Platz. Ich kann nicht herausfinden warum. Ich benutze PHP 7.0.16.Reihenfolge Strings und Zahlen in PHP
class Classe {
protected $data = array();
public function Set($chave, $valor) {
$this->data[$chave] = $valor;
}
public function Get($chave) {
return $this->data[$chave];
}
}
$objetos = array();
$nomes = array('Joao', 'Jose', 'Lucas', 'Antonio', 'Miguel', 'Arthur', 'Davi', 'Bernardo', 'Heitor', 'Gabriel');
$posicoes = array(7, '8.2', '9', 1.0, '5', 1.1, '3.2', '2', '4', 4.2);
for ($i = 0; $i < 10; ++$i) {
$objeto = new Classe;
$objeto->Set('pos', $posicoes[$i]);
$objeto->Set('nome', $nomes[$i]);
$objetos[] = $objeto;
}
foreach ($objetos as $o) {
echo "{$o->Get('pos')}: {$o->Get('nome')}\n";
}
echo "\nAfter sorting:\n";
usort($objetos,
function($a, $b) {
return $a->Get('pos') - $b->Get('pos');
});
foreach ($objetos as $o) {
echo "{$o->Get('pos')}: {$o->Get('nome')}\n";
}
Sortieren nach der Sortierung:
1: Antonio 1,1: Arthur 2: Bernardo 3.2: Davi 4: Heitor 5: Miguel 4.2: Gabriel 7: Joao 8.2 : Jose 9: Lucas
Hinweis wie die Punkte 4.2 und 5 außer Betrieb sind. Warum das?