为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
米脂 2023-09-22 17:46:27
我正在尝试在 Symfony 中按名称对对象数组进行排序。但我不知道该怎么做,因为字符串以数字开头,所以顺序不好。我尝试在我的存储库中使用 queryBuilder: $qb = $this->createQueryBuilder('arrondissement')            ->addOrderBy('arrondissement.nom', 'ASC');        $query = $qb->getQuery();        return $query->execute();控制器中还有一个 sort() 函数,但正如你所看到的,情况并不完全如此。我想要这样的东西:1er arrondissement,2e ....,20e ...,巴黎
查看完整描述

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 

)



查看完整回答
反对 回复 2023-09-22
?
aluckdog

TA贡献1847条经验 获得超7个赞

在这种情况下,恕我直言,您不应该通过 PHP 更改排序,而应使用数据库排序。


这是我修改查询生成器的建议:


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

            ->add( 'orderBy', 'CAST(arrondissement.nom AS UNSIGNED), arrondissement.nom')

        $query = $qb->getQuery();

        return $query->execute();


查看完整回答
反对 回复 2023-09-22
?
慕姐8265434

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。

查看完整回答
反对 回复 2023-09-22
  • 3 回答
  • 0 关注
  • 79 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信