对以数字开头的字符串数组进行排序

我正在尝试在 Symfony 中按名称对对象数组进行排序。但我不知道该怎么做,因为字符串以数字开头,所以顺序不好。


我尝试在我的存储库中使用 queryBuilder:


 $qb = $this->createQueryBuilder('arrondissement')

            ->addOrderBy('arrondissement.nom', 'ASC');

        $query = $qb->getQuery();

        return $query->execute();

控制器中还有一个 sort() 函数,


但正如你所看到的,情况并不完全如此。我想要这样的东西:1er arrondissement,2e ....,20e ...,巴黎

https://img.mukewang.com/650d62bf0001c7e403121126.jpg

米脂
浏览 82回答 3
3回答

明月笑刀无情

您可以使用 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 )

aluckdog

在这种情况下,恕我直言,您不应该通过 PHP 更改排序,而应使用数据库排序。这是我修改查询生成器的建议: $qb = $this->createQueryBuilder('arrondissement')            ->add( 'orderBy', 'CAST(arrondissement.nom AS UNSIGNED), arrondissement.nom')        $query = $qb->getQuery();        return $query->execute();

慕姐8265434

在学说中,您无法轻松地按自然顺序对字符串/对象进行排序。但你可以在 php 中对其进行排序:$result = $query->getResult();$nomSort = function($a, $b) :int {    return strnatcmp($a->getNom(), $b->getNom());}usort($result, $nomSort);// $result is now sortedstrnatcmp将根据“自然排序”进行比较,即解释“1”<“2”<“10”<“20”,即使附加了更多字母。usort可以将自定义排序函数应用于数组 - 这是必需的,因为您想要访问数组元素(对象)的子元素(nom)。- 否则你可能只使用 natsort。
打开App,查看更多内容
随时随地看视频慕课网APP