3 回答

TA貢獻1828條經驗 獲得超4個贊
您可以使用 phpnatsort例如:
$arr = [
'10e arrondrissement',
'1e arrondrissement',
'8e arrondrissement',
'2e arrondrissement',
'5e arrondrissement',
];
natsort($arr);
print_r($arr);
將返回 :
Array (
[1] => 1e arrondrissement
[3] => 2e arrondrissement
[4] => 5e arrondrissement
[2] => 8e arrondrissement
[0] => 10e arrondrissement
)

TA貢獻1847條經驗 獲得超7個贊
在這種情況下,恕我直言,您不應該通過 PHP 更改排序,而應使用數據庫排序。
這是我修改查詢生成器的建議:
$qb = $this->createQueryBuilder('arrondissement')
->add( 'orderBy', 'CAST(arrondissement.nom AS UNSIGNED), arrondissement.nom')
$query = $qb->getQuery();
return $query->execute();

TA貢獻1813條經驗 獲得超2個贊
在學說中,您無法輕松地按自然順序對字符串/對象進行排序。但你可以在 php 中對其進行排序:
$result = $query->getResult();
$nomSort = function($a, $b) :int {
? ? return strnatcmp($a->getNom(), $b->getNom());
}
usort($result, $nomSort);
// $result is now sorted
strnatcmp
將根據“自然排序”進行比較,即解釋“1”<“2”<“10”<“20”,即使附加了更多字母。
usort
可以將自定義排序函數應用于數組 - 這是必需的,因為您想要訪問數組元素(對象)的子元素(nom)。- 否則你可能只使用 natsort。
- 3 回答
- 0 關注
- 156 瀏覽
添加回答
舉報