【发布时间】:2017-10-02 14:17:16
【问题描述】:
我在试验 PHP 类型杂耍,发现了一个我无法解释的奇怪行为。我根据有时是字符串,有时是数字的属性对对象进行排序。使用 usort,有些项目会不合适。我不知道为什么。我正在使用 PHP 7.0.16。
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:海特 5:米格尔 4.2:加布里埃尔 7:若昂 8.2:何塞 9:卢卡斯
请注意项目 4.2 和 5 是如何出现问题的。这是为什么呢?
【问题讨论】:
标签: php sorting type-conversion usort