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 : 루카스
공지 사항 아이템 4.2와 5의 순서가 어긋났습니다. 왜 그런가요?