私はPHP型のジャグリングを試していましたが、私は説明できない凶悪な振る舞いを見つけました。私は時には文字列、時には数字であるプロパティに基づいてオブジェクトをソートしていました。 usortを使用すると、いくつかの項目が不調になります。なぜ私は理解できません。私はPHP 7.0.16を使用しています。文字列と数値を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";
}
順序ソート後:
1:アントニオ 1.1:アーサー 2:ベルナルド 3.2:ダヴィ 4:Heitor 5:ミゲル 4.2:ガブリエル 7:ジョアン 8.2 :Jose 9:Lucas
通知どのように項目4.2と5が故障しているか。何故ですか?